我在 Java 中使用
Scanner
类,我遇到了一个问题,我的程序会执行如下操作:
public static void answer() {
System.out.print("\t> ");
command = scan.nextLine(); // It needs to be able to read the full line to be able to capture spaces
}
public static void main(String[] args) {
while (!command.contains("Hello World!")) {
System.out.println("Hello!!");
answer();
}
}
但是会打印这个:
Hello!!
> Hello!!
(user input)
因此,经过一番研究,我决定将程序更改为如下所示:
public static void answer() {
scan.nextLine(); // new piece
System.out.print("\t> ");
command = scan.nextLine();
}
public static void main(String[] args) {
while (!command.contains("Hello World!")) {
System.out.println("Hello!!");
answer();
}
}
这导致了另一个问题。如果用户通过键入“fjbejwkb”而不是“Hello World!”之类的内容搞乱了他们的输入,就会发生这种情况:
Hello!!
> fjbejwkb (user inputs wrong thing)
Hello!!
(user input)
> (user input)
如果我去掉添加的
scan.nextLine()
,我就会回到原来的问题“Hello!!”被打印两次,但如果我保留它,每当我在第一次使用后使用 answer()
方法时,它都会强制用户输入两件事。虽然第一个没有读过,但我确信这可能会导致一些我想避免的混乱。
我尝试过使用
println
/ \n
而不是 scan.nextLine()
但这在视觉上对我来说没有吸引力:
Hello!!
> (user input)
我也尝试过
command = scan.next()
而不是 command = scan.nextLine()
但这并没有捕获空格 - 对于我正在解决的问题我需要它。
这就是我想要的:
Hello!!
> fjbejwkb (user inputs wrong thing)
Hello!!
> (user input)
当用户输入错误时,应该要求输入一次,然后再要求输入。
只需使用 do-while (而不是
while
):
import java.util.Scanner;
public class HeloWrld {
private static Scanner scan = new Scanner(System.in);
private static String command;
public static void answer() {
System.out.print("\t> ");
command = scan.nextLine(); // It needs to be able to read the full line to be able to capture spaces
}
public static void main(String[] args) {
do {
System.out.println("Hello!!");
answer();
} while (!command.contains("Hello World!"));
System.out.println("Good bye.");
}
}
上述代码示例运行的输出:
Hello!!
> fjbejwkb
Hello!!
> Hello World!
Good bye.