以下是两个脚本,这些脚本仅在用户被要求输入的顺序上有所不同。脚本#1有效,而脚本#2没有按预期工作。
在脚本#1中,我先问name
个问题,然后问age
个问题。
在脚本#2中,我先问age
个问题,然后问name
个问题。
脚本#1(有效):
import java.util.Scanner;
public class Example2 {
public static void main(String[] args) {
// Initiate a new Scanner
Scanner userInputScanner = new Scanner(System.in);
// Name Question
System.out.print("\nWhat is your name? ");
String name = userInputScanner.nextLine();
// Age Question
System.out.print("How old are you?");
int age = userInputScanner.nextInt();
System.out.println("\nHello " + name + ". You are " + age
+ " years old");
}
}
脚本#2(不起作用):
import java.util.Scanner;
public class Example2 {
public static void main(String[] args) {
// Initiate a new Scanner
Scanner userInputScanner = new Scanner(System.in);
// Age Question
System.out.print("How old are you?");
int age = userInputScanner.nextInt();
// Name Question
System.out.print("\nWhat is your name? ");
String name = userInputScanner.nextLine();
System.out.println("\nHello " + name + ". You are " + age
+ " years old");
}
}
脚本#2中的,用户输入age
后,他/她将以下内容打印到控制台:
What is your name?
Hello . You are 28 years old
然后脚本结束,不允许他/她输入name
我的问题: 为什么脚本#2不起作用? 我可以做些什么来使脚本#2工作(同时保持输入顺序)
答案 0 :(得分:4)
阅读年龄后,您必须使用EOL(行尾):
System.out.print("How old are you?");
int age = userInputScanner.nextInt();
userInputScanner.nextLine();
// Name Question
System.out.print("\nWhat is your name? ");
String name = userInputScanner.nextLine();
如果你不这样做,EOL符号将在String name = userInputScanner.nextLine();
消耗,这就是你无法输入的原因。
答案 1 :(得分:4)
当你读一行时,它会读到整行直到最后。
当你读取一个数字时,它只是读取数字,它不会读取行的结尾,例如,除非你再次调用nextInt()
,在这种情况下它会将新行读作空格。< / p>
简而言之,如果您希望输入在数字后忽略任何内容,请写
int age = userInputScanner.nextInt();
userInputScanner.nextLine(); // ignore the rest of the line.
在您的情况下,如果您没有输入任何内容,则nextLine()
将读取数字后的文本或空字符串。
答案 2 :(得分:2)
nextInt()
方法不会消耗输入流的回车符。你需要自己消费它。
import java.util.Scanner;
public class Example2 {
public static void main(String[] args) {
// Initiate a new Scanner
Scanner userInputScanner = new Scanner(System.in);
// Age Question
System.out.print("How old are you?");
int age = userInputScanner.nextInt();
// consume carriage return
userInputScanner.nextLine();
// Name Question
System.out.print("\nWhat is your name? ");
String name = userInputScanner.nextLine();
System.out.println("\nHello " + name + ". You are " + age
+ " years old");
}
}
答案 3 :(得分:1)
如果用户输入一个数字(比方说21),输入实际上是:“21 \ n”。
您需要通过额外调用nextLine跳过“\ n”:
// Age Question
System.out.print("How old are you?");
int age = userInputScanner.nextInt();
userInputScanner.nextLine(); // skip "\n"