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
数组并设置姓名和年龄,但它在 age = Scanner.nextInt(); 行抛出一个
InputMismatchException
。
最佳答案
当您询问人数时,用户不仅仅是键入数字,他们还会在输入流中插入行终止符。因此,当您询问名称时,您不会得到名称,而是会在名称之前得到行终止符。然后当你执行 .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);
}
关于java - 为什么我的代码中有一个InputMismatchException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36244370/