Получение бесконечного цикла в Java из-за ошибки обработки. Как я могу это исправить? - PullRequest
0 голосов
/ 01 декабря 2011

Это моя петля.Повторяется бесконечно, если введен не-int.Из того, что я вижу, кажется, что исключение не очищается при следующем запуске цикла.Или потому что он берет предыдущий ввод и назначает его на menuChoice.Как я могу это исправить?

while(!console.hasNextInt())
{
    try {
        menuChoice = console.nextInt();
    } catch(InputMismatchException e) {
        System.out.println("The selection you made is invalid.");
    }
}

Ответы [ 2 ]

3 голосов
/ 01 декабря 2011

не проверять int в цикле while, проверять любой входной токен:

while(console.hasNext()){
  if(console.hasNextInt()){
   try {
        menuChoice = console.nextInt();
    } catch(InputMismatchException e) {
        System.out.println("The selection you made is invalid.");
    }
  }else{
     //throw away non-ints
       console.next();
  }

}
0 голосов
/ 01 декабря 2011

это может быть быстрее, потому что hasNextInt() и nextInt() оба пытаются проанализировать следующий токен для int.В этом решении анализ выполняется только один раз:

while(console.hasNext()){
    try {
        menuChoice = console.nextInt();
    } catch(InputMismatchException e) {
        System.out.println("The selection you made is invalid.");
    } finally {
        //throw away non-ints
        console.next();
    }
}
...