0
     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数组并设置名称和年龄,但它会抛出一个InputMismatchExceptionat 行age = scanner.nextInt();

4

2 回答 2

1

当您按 enter afterscanner.nextInt()时,永远不会删除结束换行符。我一直发现它最容易使用Integer.parseInt(scanner.nextLine()),而不是scanner.nextInt()因为这个原因;这些问题永远不会发生。

于 2016-03-27T06:28:51.693 回答
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);
}
于 2016-03-27T06:32:52.973 回答