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

时间:2015-10-07 10:38:40

标签: 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    

2 个答案:

答案 0 :(得分: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调用立即得到回车,创建一个空的学生名称,你直接跳到下一个{{1}打电话。这一直持续到达到学生的完成量。在nextInt捕获回车后调用nextLine,您就可以输入学生姓名。

您可以在打印时明确注意到这一点

nextInt

同时。你总是直接跳到Integer的下一个输入。

Edit2:

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

Enter student name 
Enter grade

答案 1 :(得分:0)

看看这个:

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) {
            String num = input.nextLine();
            System.out.println("Enter student name");
            String studentName = input.next();

            System.out.println("Enter grade");
            int grade = Integer.parseInt(input.next());

            number++;
        }
    }