Не могу использовать сканер для строки и целого числа одновременно

Я работаю над этим кодом, который принимает целое число в качестве тестового примера, затем принимает строку и целое число для каждого тестового случая, но я продолжаю получать это исключение:

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: вы хотите убедиться, что цикл остановится в текущей точке, чтобы он не продолжался вечно.

Другие вопросы по тегам