我在Java Scanner获得用户输入时遇到了一个相当奇怪的问题。我做了一个练习程序,首先使用nextDouble()
读取一个double,输出一些简单的文本,然后使用相同的scanner对象来使用nextLine()
获取字符串输入。
以下是代码:
import java.util.Scanner;
public class UsrInput {
public static void main(String[] args) {
//example with user double input
Scanner reader = new Scanner(System.in);
System.out.println("Enter a number: ");
double input = reader.nextDouble();
if(input % 2 == 0){
System.out.println("The input was even");
}else if(input % 2 == 1){
System.out.println("The input was odd");
}else{
System.out.println("The input was not an integer");
}
//example with user string input
System.out.println("Verify by typing the word 'FooBar': ");
String input2 = reader.nextLine();
System.out.println("The string equal 'FooBar': " + input2.equals("FooBar"));
}
}
现在显然我的目的是要求第二个输入,如果字符串input2等于'FooBar',则打印是否为真。但是,当我运行它时,它跳过第二个输入并立即告诉我它不相等。 然而如果我将reader.nextLine()
更改为reader.next()
,它会突然发挥作用。
如果我创建一个新的Scanner实例并使用reader2.nextLine()
所以我的问题是为什么我的Scanner对象没有要求我输入新内容?如果我打印出“input2”的值,它就是空的。
答案 0 :(得分:2)
您必须清除扫描仪才能使用reader.nextLine();
,如下所示:
if (input % 2 == 0) {
System.out.println("The input was even");
} else if (input % 2 == 1) {
System.out.println("The input was odd");
} else {
System.out.println("The input was not an integer");
}
reader.nextLine();//<<--------------Clear your Scanner so you can read the next input
//example with user string input
System.out.println("Verify by typing the word 'FooBar': ");
String input2 = reader.nextLine();
System.out.println("The string equal 'FooBar': " + input2.equals("FooBar"));
修改强>
为什么'next()'会忽略扫描仪中仍然留下的\ n?
您将在此处了解此示例:
public static void main(String[] args) {
String str = "Hello World! Hello Java!";
// create a new scanner with the specified String Object
Scanner scanner = new Scanner(str);
while(scanner.hasNext()){
System.out.println( scanner.next());
}
scanner.close();
}
<强>输出强>
Hello
World!
Hello
Java!
public static void main(String[] args) {
String str = "Hello World!\nHello Java!";
// create a new scanner with the specified String Object
Scanner scanner = new Scanner(str);
while(scanner.hasNext()){
System.out.println( scanner.nextLine());
}
scanner.close();
}
<强>输出强>
Hello World!
Hello Java!
因此,我们可以理解next()
逐字逐句阅读,因此它不会使用\ n像nextLine()