#java #inputmismatchexception
#java #исключение inputmismatchexception
Вопрос:
Я пытаюсь принимать входные данные один за другим, а затем пытаюсь выполнять операции над ними. Следуя моему коду.
import java.util.Scanner;
public class PlayerRoster {
public static void main(String[] args) {
Scanner scnr = new Scanner(System.in);
final int LENGTH = 5;
final char quit = 'q';
char uin = 'z';
int jersey = 0;
int chng = 0;
int[] number = new int[LENGTH];
int[] rating = new int[LENGTH];
for(int i = 0; i < LENGTH; i ){
System.out.println("Enter player " (i 1) "'s jersey number:");
number[i] = scnr.nextInt();
System.out.println("Enter player " (i 1) "'s rating:n");
rating[i] = scnr.nextInt();
}
for(int i = 0; i < LENGTH; i ){
if (i == 0)
System.out.println("ROSTER");
System.out.println("Player " (i 1) " -- Jersey number: " (number[i]) ", Rating: " (rating[i]));
if (i == 4)
System.out.println("");
}
while (uin != quit){
System.out.println("MENU");
System.out.println("u - Update player rating");
System.out.println("a - Output players above a rating");
System.out.println("r - Replace player");
System.out.println("o - Output roster");
System.out.println("q - Quitn");
System.out.println("Choose an option:");
uin = scnr.next().charAt(0);
if (uin == 'o')
for(int i = 0; i < LENGTH; i ){
if (i == 0)
System.out.println("ROSTER");
System.out.println("Player " (i 1) " -- Jersey number: " (number[i]) ", Rating: " (rating[i]));
if (i == 4)
System.out.println("");
}
if (uin == 'u')
System.out.println("Enter a jersey number: ");
chng = scnr.nextInt();
}
}
}
В настоящее время я не сосредоточен на логике, поскольку я не могу принимать входные данные, как я получаю Exception in thread "main" java.util.InputMismatchException
, когда просто пытаюсь получить больше пользовательского ввода.
Мои входные данные: 20 5 30 2 50 4 60 8 93 9 u 20 q
Я перепробовал все, начиная с char
обычного Strings
. Такое ощущение, что сканер просто не работает или что-то в этом роде.
Exception in thread "main" java.util.NoSuchElementException
at java.base/java.util.Scanner.throwFor(Scanner.java:937)
at java.base/java.util.Scanner.next(Scanner.java:1594)
at java.base/java.util.Scanner.nextInt(Scanner.java:2258)
at java.base/java.util.Scanner.nextInt(Scanner.java:2212)
at PlayerRoster.main(PlayerRoster.java:55)
Комментарии:
1. в какой строке это происходит? это может быть связано с тем, что вы смешиваете вызовы nextInt() и next(). nextInt() не использует ввод
2. @Stultuske только что добавил код, забыл об этом.
3. @Stultuske chng = scnr.nextInt();
4. вы имеете в виду, что вы добавили трассировку стека (или ее часть)? вы знаете, что это не код, верно?
5. @Stultuske да, я знаю, что это не код. Я просто говорю это, потому что мне, к сожалению, пришлось сделать отступ в виде кода, чтобы опубликовать проклятую трассировку стека.
Ответ №1:
Проблема заключается в блоке кода
if (uin == 'u')
System.out.println("Enter a jersey number: ");
chng = scnr.nextInt();
Поскольку вам нужен номер джерси только в том случае, когда пользователь вводит данные как «u», ваш chng = scnr.nextInt(); должен быть внутри блока if .
В вашем случае, даже если пользователь вводит данные как «q», он все равно ожидает большего ввода от пользователя, и, вероятно, вы просто предоставляете пустое место в этом случае, предоставляя вам исключение InputMismatchException.
Чтобы исправить это, обновите код до
if (uin == 'u')
{
System.out.println("Enter a jersey number: ");
chng = scnr.nextInt();
}
Итак, теперь, если вы вводите данные как «q», ваш цикл прекращает выполнение, что является ожидаемым результатом.
Комментарии:
1. У меня больше нет ошибок после изменения моего кода на это. Большое спасибо! Я понятия не имел, что мне когда-либо нужно заключать в скобки операторы if.
2. Вам нужно добавить скобки к оператору if, если вы хотите, чтобы в блок if было включено более 1 оператора, в противном случае это необязательно.
3. @holdthemayo7 У вас такая же проблема в строках с
System.out.println("Player "
, а также. Это не вызывает исключений, оно просто всегда выводит эту строку.