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();
答案 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);
}