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()).

将其解析为整数