Java中Scanner.nextLine的问题
在Java中,我尝试过Java中Scanner.nextLine的问题,java,java.util.scanner,system.in,Java,Java.util.scanner,System.in,在Java中,我尝试过 try (Scanner sc = new Scanner(System.in)) { while (sc.hasNextLine()) { System.out.print("Name: "); String name = sc.nextLine(); System.out.println("Name is \"" + name + "\""); } } 但在请求输入之前,它不会输出Name: 控制台只显
try (Scanner sc = new Scanner(System.in)) {
while (sc.hasNextLine()) {
System.out.print("Name: ");
String name = sc.nextLine();
System.out.println("Name is \"" + name + "\"");
}
}
但在请求输入之前,它不会输出Name:
控制台只显示一个空的控制台窗口,我可以在其中输入名称
在询问姓名之前,如何确保输出了Name:
编辑
将println放在while循环之前,然后在末尾添加一个
try (Scanner sc = new Scanner(System.in)) {
System.out.print("Name: ");
while (sc.hasNextLine()) {
String name = sc.nextLine();
System.out.println("Name is \"" + name + "\"");
System.out.print("Name: ");
}
}
扫描仪等待收到输入后再运行下一个代码,因此只需将打印放在扫描仪之前,然后放在while循环的末尾。您应该将
System.out.print(“名称:”)放在打印机上代码>在while循环之前,如下所示:
try (Scanner sc = new Scanner(System.in)) {
System.out.print("Name: ");
while (sc.hasNextLine()) {
String name = sc.nextLine();
System.out.println("Name is \"" + name + "\"");
}
}
如果您想知道这个问题的原因,请查看一下,这可能是一个更好的设计,以避免重复代码。
不必将循环结束条件限制为while语句;)
编辑:
您的编辑无法正常工作,因为sc.nextInt()
没有吃换行符,所以请将sc.nextLine()
放在sc.nextInt()
之后,如果您的答案与我相同,您不需要再发布另一个。@10回复我想是这样,但我在没有看到您的答案的情况下回答的问题在哪里,但这是一个循环,所以我想在每次循环运行时打印名称,尝试运行它。您可以看到它在扫描仪之前打印,然后在扫描后再次打印。您还应该解释为什么它在最初的OP中无法正常工作。。。基本上,Scanner#hasNextLine()
会在流仍然打开时等待一些输入。。。所以,在你输入一些东西之前,它不会进入循环…啊,我明白了。但是我编辑的代码呢?它不工作,在第二次迭代时表现正确。没有做任何更改。你是对的,不是刷新。while(…hasNextLine())
正在等待输入,这就是它不打印的原因。。
try (Scanner sc = new Scanner(System.in)) {
System.out.print("Name: ");
while (sc.hasNextLine()) {
String name = sc.nextLine();
System.out.println("Name is \"" + name + "\"");
}
}
try (Scanner sc = new Scanner(System.in)) {
while (true) {
System.out.print("Name: ");
if (!sc.hasNextLine()) break;
String name = sc.nextLine();
System.out.println("Name is \"" + name + "\"");
}
}