为什么我的代码中有 InputMismatchException
Why there is an InputMismatchException in my code
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
当您在 scanner.nextInt()
后按回车键时,永远不会删除结尾的换行符。出于这个原因,我一直发现使用 Integer.parseInt(scanner.nextLine())
而不是 scanner.nextInt()
最容易;这些问题永远不会发生。
当您询问人数时,用户不仅仅是在输入一个数字,他们还在输入流中插入一个行终止符。因此,当您询问名称时,您并没有得到名称,而是在名称之前得到了行终止符。然后当你为年龄做 .nextInt()
时,你终于得到了名字。因此,您需要做的第一件事是在读取 noOfP
的值后添加 scanner.nextLine()
以跳过该行终止符。这将解决第一人称时代的问题。然后事情又会开始崩溃。
当你询问年龄时你做同样的事情:你调用 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);
}
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
当您在 scanner.nextInt()
后按回车键时,永远不会删除结尾的换行符。出于这个原因,我一直发现使用 Integer.parseInt(scanner.nextLine())
而不是 scanner.nextInt()
最容易;这些问题永远不会发生。
当您询问人数时,用户不仅仅是在输入一个数字,他们还在输入流中插入一个行终止符。因此,当您询问名称时,您并没有得到名称,而是在名称之前得到了行终止符。然后当你为年龄做 .nextInt()
时,你终于得到了名字。因此,您需要做的第一件事是在读取 noOfP
的值后添加 scanner.nextLine()
以跳过该行终止符。这将解决第一人称时代的问题。然后事情又会开始崩溃。
当你询问年龄时你做同样的事情:你调用 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);
}