2016-01-02 2 views
0

Я хотел бы, чтобы пользователь вводил строку текста, если x не равно значению numOfContestans. Когда я запускаю код, я получаю InputMismatchException. Кто-нибудь есть идея о том, как решить эту ошибку?InputMismatchException при чтении чисел и текста с помощью сканера

try { 
    int numOfContestants = scan.nextInt(); 
    int problems = scan.nextInt(); 
    scan.nextLine(); 
    int x = 0; 

    while (x != numOfContestants) { 
     String input = scan.nextLine(); 
     x++; 
    } 
    System.out.println(problems); 
} catch(InputMismatchException e) { 
    System.out.println("Something went wrong"); 
} 
+2

В большинстве случаев сканер требует проверки перед чтением. Вы должны проверить, что у Сканера 'есть' предмет, о котором идет речь. Перед чтением попробуйте 'hasNextLine()'. – markspace

+0

Какова последовательность ввода, для которой yo получает исключение? – YoungHobbit

+0

@YoungHobbit Я могу ввести две цифры, а затем одну строку текста до возникновения ошибки. – kylel95

ответ

1

Вы не указали ввод, который вызывает проблему. Если вы попробуете этот вход,

3 
2 
line1 
line2 
line3 

nextInt не читает CR/LF в конце строки. Первый вызов nextLine пуст. Цикл выполняется правильно, но первый проход не читает полную строку. После прочтения проблем прочитайте следующую строку.

int problems = scan.nextInt();   
String input = scan.nextLine(); 

Вы также можете ввести вам данные, так это выглядит, как

3 
2 line1 
line2 
line3 

Тогда ваш код работает.

Я не мог сгенерировать ошибку до тех пор, пока интерьеры были введены правильно.

Я не знаю, как nextLine может вызвать исключение TypeMismatchException. Я запустил этот код и могу вызвать такую ​​ошибку, если целое число введено неправильно. Пожалуйста, укажите ввод, который вызывает ошибку.

+0

Спасибо. Я несколько путаюсь, как мне изменить код? Вы предлагаете мне взять String input = scan.nextLine() из цикла while? Можете ли вы прояснить, пожалуйста? Благодарю. – kylel95

+0

Оставьте свой код таким, как есть, и добавьте дополнительное сканирование после чтения int. Я переместил определение ввода String в его новое, первое использование. – downeyt

+0

Итак, как только я перемещаю вход из цикла while, что остается в цикле? @downeyt – kylel95

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