Не могу использовать сканер для строки и целого числа одновременно
Я работаю над этим кодом, который принимает целое число в качестве тестового примера, затем принимает строку и целое число для каждого тестового случая, но я продолжаю получать это исключение:
Exception in thread "main" java.util.InputMismatchException
at java.util.Scanner.throwFor(Unknown Source)
at java.util.Scanner.next(Unknown Source)
at java.util.Scanner.nextInt(Unknown Source)
at java.util.Scanner.nextInt(Unknown Source)
at OverSizedPancakeFlipper.main(OverSizedPancakeFlipper.java:18)
Мой код в основном выглядит так:
Scanner userInput = new Scanner(System.in);
int T=userInput.nextInt();
userInput.nextLine();
while(T-->0){
String S=userInput.nextLine();
char[] ch = S.toCharArray();
int K=userInput.nextInt();
//code does work here
}
Дайте мне знать, если вам нужна другая информация, и спасибо за всю помощь.
3 ответа
Scanner userInput = новый сканер (System.in);
do{
String s=userInput.nextLine();
char[] ch = s.toCharArray();
int k=userInput.nextInt();
//code does work here
}while(k==0);
Вы можете использовать это.....
Измените эту строку:
int K=userInput.nextInt();
К этому:
int K=Integer.parseInt(userInput.nextLine());
Конечно, вам нужно обработать NumberFormatException.
Объяснение этого изменения см. В дубликате вопроса. Сканер пропускает nextLine() после использования next(), nextInt() или других методов nextFoo().
Короче говоря, проблема в том, что вы забыли прочитать символ новой строки после целого числа. Тогда nextLine возьмет пустую строку и использует новую строку. Тогда nextInt не удастся, потому что он расположен на недопустимом содержимом.
Измените свой код на
while(variableName==0){
...
}
при написании while
loop: вы хотите убедиться, что цикл остановится в текущей точке, чтобы он не продолжался вечно.