Java 扫描器不接受字符串前的整数输入
Java Scanner not accepting integer input before string
public static void main(String[] args) {
Student[] test = new Student[7];
for (int i = 0; i < 7; i++) {
test[i] = new Student();
Scanner kb = new Scanner(System.in);
System.out.println("What is the Students ID number?: ");
test[i].setStudentId(kb.nextInt());
System.out.println("What is the Students name?: ");
test[i].setStudentName(kb.nextLine());
}
}
在上面的程序中,当我首先尝试采用整数输入时,它会跳过字符串输入,但在同一个程序中,如果我首先保留字符串输入,它就可以正常工作。这背后的原因可能是什么?
Scanner kb = new Scanner(System.in);
System.out.println("What is the Students name?: ");
test[i].setStudentName(kb.nextLine());
System.out.println("What is the Students ID number?: ");
test[i].setStudentId(kb.nextInt());
程序的输出将是
学生证号码是多少?:
1
学生姓名是什么?://它不允许我在此处输入字符串
学生证号码是多少?:
但是当我在字符串上方输入 Integer 时它工作正常。可能是什么原因?
在您调用 nextInt()
之后,扫描器已经前进到整数之后,但没有超过输入整数的行尾。当您尝试读取 ID 字符串时,它会读取该行的其余部分(空白)而不等待进一步输入。
要解决此问题,只需在调用 nextInt()
后添加对 nextLine()
的调用。
System.out.println("What is the Students ID number?: ");
test[i].setStudentId(kb.nextInt());
kb.nextLine(); // eat the line terminator
System.out.println("What is the Students name?: ");
test[i].setStudentName(kb.nextLine());
对nextInt()
的调用只读取整数,行分隔符(\n
)留在缓冲区中,因此后续对nextLine()
的调用只读取到行分隔符已经在那了。
解决方案是也使用 nextLine()
作为 ID,然后使用 Integer.parseInt(kb.nextLine())
.
将其解析为整数
public static void main(String[] args) {
Student[] test = new Student[7];
for (int i = 0; i < 7; i++) {
test[i] = new Student();
Scanner kb = new Scanner(System.in);
System.out.println("What is the Students ID number?: ");
test[i].setStudentId(kb.nextInt());
System.out.println("What is the Students name?: ");
test[i].setStudentName(kb.nextLine());
}
}
在上面的程序中,当我首先尝试采用整数输入时,它会跳过字符串输入,但在同一个程序中,如果我首先保留字符串输入,它就可以正常工作。这背后的原因可能是什么?
Scanner kb = new Scanner(System.in);
System.out.println("What is the Students name?: ");
test[i].setStudentName(kb.nextLine());
System.out.println("What is the Students ID number?: ");
test[i].setStudentId(kb.nextInt());
程序的输出将是
学生证号码是多少?: 1
学生姓名是什么?://它不允许我在此处输入字符串
学生证号码是多少?:
但是当我在字符串上方输入 Integer 时它工作正常。可能是什么原因?
在您调用 nextInt()
之后,扫描器已经前进到整数之后,但没有超过输入整数的行尾。当您尝试读取 ID 字符串时,它会读取该行的其余部分(空白)而不等待进一步输入。
要解决此问题,只需在调用 nextInt()
后添加对 nextLine()
的调用。
System.out.println("What is the Students ID number?: ");
test[i].setStudentId(kb.nextInt());
kb.nextLine(); // eat the line terminator
System.out.println("What is the Students name?: ");
test[i].setStudentName(kb.nextLine());
对nextInt()
的调用只读取整数,行分隔符(\n
)留在缓冲区中,因此后续对nextLine()
的调用只读取到行分隔符已经在那了。
解决方案是也使用 nextLine()
作为 ID,然后使用 Integer.parseInt(kb.nextLine())
.