如何使用Scanner方法"hasNext"作为条件退出java中的while循环?

Syn*_*nia 14 java loops infinite-loop while-loop

我是java编程的初学者,遇到了一个奇怪的问题.下面是我的代码,它要求用户输入并打印出用户一次输入一个单词的内容.

问题是程序永远不会结束,从我有限的理解,它似乎陷入了while循环.有人能帮我一点吗?提前致谢.

import java.util.Scanner;

public class Test{
   public static void main(String args[]){
      System.out.print("Enter your sentence: ");
      Scanner sc = new Scanner (System.in);

      while (sc.hasNext() == true ) {
        String s1 = sc.next();
        System.out.println(s1);
      }

      System.out.println("The loop has been ended"); // This somehow never get printed.
   }
}
Run Code Online (Sandbox Code Playgroud)

İsm*_*kan 18

你继续获得一个新的字符串并继续循环,如果它不是空的.只需在循环中插入一个控件以获取退出字符串.

while(!s1.equals("exit") && sc.hasNext()) {
    // operate
}
Run Code Online (Sandbox Code Playgroud)

如果你想在循环中声明字符串而不是在循环体中执行操作,如果字符串是"exit":

while(sc.hasNext()) {
    String s1 = sc.next();
    if(s1.equals("exit")) {
        break;
    }
    //operate
}
Run Code Online (Sandbox Code Playgroud)


Aln*_*tak 8

Scanner会继续读,直到找到一个条件"的文件结束".

当您正在阅读时stdin,这将是您发送EOF字符(通常^d在Unix上),或者如果您使用<样式重定向,则在文件末尾.


Ren*_*ato 5

当您使用扫描仪时,如 Alnitak 所提到的,当您有 EOF 字符时,您只会得到 hasNext() 的“false”,基本上……您无法使用键盘轻松发送 EOF 字符,因此在这种情况下,这是很常见的具有可以发送以停止执行的特殊字符或单词,例如:

String s1 = sc.next();
if (s1.equals("exit")) {
    break;
}
Run Code Online (Sandbox Code Playgroud)

Break 会让你摆脱困境。

  • “您无法使用键盘轻松发送 EOF 字符”——通常在 Linux/Unix/Mac 上使用 Ctrl+D 或在 Windows 上使用 Ctrl+Z。 (4认同)
  • 谢谢,但是特定于操作系统的知识通常不能与 Java 很好地混合……因此评论。 (2认同)