java - 为什么我的代码中有一个InputMismatchException

标签 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 数组并设置姓名和年龄,但它在 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/

相关文章:

java - 与异常处理相关的基本 Java While(true) 问题

java - InputMismatchException...即使使用 try/catch

java - 无法从 T 转换为整数

java - 在Java中获取泛型的泛型

java - Eclipse 建议更改代码。我必须如何以及在何处实例化导入类的对象?

Java:java.util.NoSuchElementException

java - 无法使用 JPA 持久保存 HashMap

java - 覆盖 Mockito toString 测试输出

java - 将高度转换为英寸 (Java)

java - 不能同时使用字符串和整数扫描器