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时它工作正常。可能是什么原因?
答案 0 :(得分:3)
对nextInt()
的调用只读取整数,行分隔符(\n
)留在缓冲区中,因此对nextLine()
的后续调用只会读取,直到行分隔符已经存在。
解决方案是使用nextLine()
作为ID,然后使用Integer.parseInt(kb.nextLine())
将其解析为整数。
答案 1 :(得分:0)
调用nextInt()
后,扫描程序已超过整数,但未超过输入整数的行的末尾。当您尝试读取ID字符串时,它会读取该行的其余部分(为空白),而不等待进一步的输入。
要解决此问题,只需在致电nextLine()
后向nextInt()
添加电话。
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());