为什么我的代码中存在InputMismatchException

时间:2016-03-27 06:02:20

标签: java java.util.scanner inputmismatchexception

     System.out.print("Input the number of persons: ");
     Scanner scanner = new Scanner(System.in);
     int noOfP = scanner.nextInt();

     Person[] person = new Person[noOfP];

     String name;
     int age;
     for(int i = 0; i < person.length; i++){
        System.out.println("Input name for guest: ");
        name = scanner.nextLine();
        System.out.println("Input age for guest: ");
        age = scanner.nextInt();

        person[i] = new Person(name,age);
     }

我只是想初始化Person数组并设置名称和年龄,但它会在行InputMismatchException

处引发age = scanner.nextInt();

2 个答案:

答案 0 :(得分:1)

当您在scanner.nextInt()之后按Enter键时,结尾的换行符永远不会被删除。由于这个原因,我总是发现使用Integer.parseInt(scanner.nextLine())代替scanner.nextInt()最简单;这些问题永远不会发生。

答案 1 :(得分:1)

当您询问人数时,用户不只是键入数字,他们还会在输入流中插入行终止符。因此,当您要求输入名称时,您没有获得名称,而是在名称之前获得行终止符。然后当你为这个年龄做.nextInt()时,你终于得到了这个名字。因此,您需要做的第一件事是在读取scanner.nextLine()的值后添加noOfP以跳过该行终止符。这将解决第一个人的时代问题。然后事情将再次开始。

当你要求年龄时,你会做同样的事情:你调用scanner.nextInt(),在流中留下另一个行终止符。之后你需要另一个scanner.nextLine(),所以事情不会在第二个人身上爆发。

代码如下所示:

System.out.print("Input the number of persons: ");
Scanner scanner = new Scanner(System.in);
int noOfP = scanner.nextInt();
scanner.nextLine();

Person[] person = new Person[noOfP];

String name;
int age;
for(int i = 0; i < person.length; i++){
    System.out.println("Input name for guest: ");
    name = scanner.nextLine();
    System.out.println("Input age for guest: ");
    age = scanner.nextInt();
    scanner.nextLine();

    person[i] = new Person(name,age);
}