java - 输入不匹配异常错误 学生成绩和姓名

标签 java java.util.scanner

我正在尝试编写一个程序,提示用户输入学生人数,然后提示输入用户名和成绩。它运行一次(这意味着我被问到学生人数,我可以输入名字和号码),然后它给出一个 InputMismatchException

你能看出哪里出了问题吗?

public class LowestScore {
    public static void main(String[] args){

        Scanner input = new Scanner(System.in);

        System.out.print ("Enter the number of students");
        int numberOfStudents = input.nextInt();

        int number = 0;

        while (number <= numberOfStudents) {
            number++;
            System.out.println ("Enter student name");
            String studentName = input.nextLine();

            System.out.println ("Enter grade");
            int grade = input.nextInt();
        }

错误

run: Enter the number of students12 Enter student name Enter grade josje 8    
Exception in thread "main" java.util.InputMismatchException at  
java.util.Scanner.throwFor(Scanner.java:864) at
java.util.Scanner.next(Scanner.java:1485) at 
java.util.Scanner.nextInt(Scanner.java:2117) at 
java.util.Scanner.nextInt(Scanner.java:2076) at 
demo.LowestScore.main(LowestScore.java:31) Java Result: 1    

最佳答案

您需要在每次 nextInt 调用后捕获回车符。

Scanner input = new Scanner(System.in);

System.out.print ("Enter the number of students");
int numberOfStudents = input.nextInt();
input.nextLine(); // catch it

int number = 0;

while (number <= numberOfStudents) {
    number++;
    System.out.println ("Enter student name");
    String studentName = input.nextLine();

    System.out.println ("Enter grade");
    int grade = input.nextInt();
    input.nextLine(); // catch it
}

请注意,如果您输入无效的整数,您仍然可能会遇到异常。

编辑:

基本上,nextInt 捕获您输入的数字,但它不会捕获回车符(您通过按 Enter 键创建的新行)。所以它的作用是,您输入一个学生数量的数字,比方说 1。 nextLine 调用立即获取回车符,创建一个空的学生姓名,然后直接跳到下一个 nextInt 调用。这种情况一直持续到学生人数达到上限为止。在 nextInt 捕获回车符后调用 nextLine,即可输入学生姓名。

您可以在打印时特别注意到这一点

Enter student name 
Enter grade

同时。您总是直接跳转到整数的下一个输入。

编辑2:

如果您还想捕获错误输入的异常,那么您可以这样做:

public static void main(String[] args) {
    Scanner input = new Scanner(System.in);
    int numberOfStudents = -1;
    boolean exception = true;
    do {
        try {
            System.out.print("Enter the number of students");
            numberOfStudents = input.nextInt();
            exception = false;
        } catch (InputMismatchException e) {}
        input.nextLine();
    } while (exception);
    int number = 0;
    while (number <= numberOfStudents) {
        exception = true;
        number++;
        System.out.println("Enter student name");
        String studentName = input.nextLine();
        int grade;
        do {
            try {
                System.out.println("Enter grade");
                grade = input.nextInt();
                exception = false;
            } catch (InputMismatchException e) {}
            input.nextLine();
        } while (exception);
        // input.nextLine();
    }
}

关于java - 输入不匹配异常错误 学生成绩和姓名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32990041/

相关文章:

java - 从 JComboBox 中选择元素后如何刷新 JScrollPane?

Java队列,整个队列被新添加的元素替换

java - 使匿名类静态 - 通过静态方法

Java:如何让扫描仪仅匹配第一次出现的情况,如果之前已匹配过则跳过

Java - 扫描仪闲置

java - JPA:orphanRemoval=true 删除时有时会抛出 NullPointerException

java - BufferedReader readLine 检测关闭的套接字并使用 .ready()

java - 将键盘中的数据存储到数组,同时忽略重复项

java - 如何在 while 循环中使用扫描仪

java - 如何从扫描仪库读取任何用户输入?