2015-04-23 2 views
0

Как бы я правильно зациклил эту инструкцию try catch? Из того, что я знаю, выполняется playerIntInput = reader.nextInt(); в блоке try, и он получает исключение, если оно существует, это должно привести к тому, что loop = false никогда не будет достигнуто. Затем он выдает сообщение в блоке catch, и он должен вернуться к try и снова запросить ввод. Вместо этого я просто получаю бесконечно замкнутый вывод из блока catch.Looping try-catch не работает

void CheckInput(int playerIntInput) { 
    boolean loop = true; 

    while(loop=true) { 
     try { 
      playerIntInput = reader.nextInt(); 
      loop = false; 
     } 
     catch(InputMismatchException e) { 
      System.out.println("Invalid character was used, try again."); 
     } 
    } 
} 
+0

Это должно быть loop == true, not loop = true –

+2

Просто используйте 'while (loop)'. –

+0

Использование только 'while (loop)' все равно приводит к бесконечному циклу для меня. Как и использование 'while (loop == true)'. Я тоже пробовал их, и петля все еще случалась. –

ответ

5

Вы использовали оператор присваивания =, так loop всегда true при проверке, вместо оператора ==. Вы можете использовать while(loop == true), но loop уже есть boolean. Самое простое решение - while(loop).

Также, если есть ошибка в nextInt, он не будет потреблять вход. Вызовите next() в блоке catch, чтобы использовать нечисловой ввод и пройти мимо него.

+0

Использование только 'while (loop)' все равно приводит к бесконечному циклу для меня. Как и использование 'while (loop == true)'. Я тоже пробовал их, и петля все еще случалась. –

+0

@userxbladeuserxblade Обновлен мой ответ; вы должны выйти за пределы недопустимого ввода. – rgettman

+0

@ rgettman Простите меня за то, что я до сих пор довольно любитель, но при использовании 'next()' точно, что это такое, и мне нужно что-то помещать в круглые скобки? –

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