我遇到了一个相当奇怪的问题,Java扫描仪获取用户输入。我制作了一个练习程序,该程序首先使用nextDouble()
读取双重,输出一些琐碎的文本,然后使用相同的扫描仪对象使用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()
,则突然起作用。
如果我创建一个新的扫描仪实例并使用reader2.nextLine()
所以我的问题是为什么我的扫描仪对象不要求我提供新的输入?如果我打印出" input2"的值,它是空的。
您必须清除扫描仪,以便可以使用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仍然留在扫描仪中?
您将在此处了解此示例:
next((
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!
nextline((
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()