2016-03-27 3 views
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 массив и установить имя и возраст, но он бросает InputMismatchException на линии age = scanner.nextInt();Почему есть InputMismatchException в моем коде

+0

Попробуйте изменить код и посмотреть, что происходит. Прокомментируйте некоторые строки, добавьте инструкцию печати и посмотрите, что произойдет. Но я предполагаю, что вы вводите строку, когда она ожидает номер. – eddyparkinson

ответ

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); 
} 
+2

Спасибо, это очень помогает. – ZDunker

1

Когда вы нажмете клавишу ВВОД после scanner.nextInt(), окончание символ новой строки никогда не удаляется. По этой причине мне всегда было проще использовать Integer.parseInt(scanner.nextLine()) вместо scanner.nextInt(); эти проблемы никогда не происходят.

Смежные вопросы