2015-01-31 3 views
0

Я пробовал два метода. Ничего не работает, и я серьезно задаюсь вопросом, почему.Сканер in.hasNextInt() никогда не возвращает true

display(text) просто System.out.println(text)

public int getMove() { 

    int move = -2; 
    display("It's your turn, pick a row [0-6] or [-1] for a hint: "); 
    Scanner in = new Scanner(System.in); 
    do { 
     if (in.hasNextInt()) { 
      move = in.nextInt(); 
     } 
     if (move == -1) { 
      display("How much time can I use?"); 
      move = -3; 
      do { 
       if (in.hasNextInt()) { 
        move = in.nextInt(); 
       } 
      } while (move == -3); 
      in.close(); 
      return -1 * move; 
     } 
    } while (move < -1); 
    in.close(); 
    return move; 

} 

Этот код не принимает любой входной сигнал (например, когда я ввести 5 не выйти из делать-пока петля).

при изменении

 if (in.hasNextInt()) { 
      move = in.nextInt(); 
     } 

к:

  move = in.nextInt(); 

он бросает java.util.NoSuchElementException.

Почему это происходит?

+0

Работает ли это для вас, если вы введете «-1» в качестве первой записи, а затем введите другое число после? Похоже, это будет –

+0

Что вы думаете 'in.close()' делает? –

+1

Я только что попробовал это в своей IDE, и после изменения 'display' на' System.out.println' все работает нормально ... no Exceptions. Вы уверены, что в этой части кода вы получаете Исключение? –

ответ

1

Это будет пропустить чтение ничего, что не является целым числом

if (in.hasNextInt()) { 
     move = in.nextInt(); 
    }  

так, когда вы вводите «абвг» это навсегда останется в буфере.

Добавить in.nextLine() в конце цикла, чтобы «пропустить» неверный ввод.

+0

Я добавил это, и он работает, когда я делаю из него тестовый класс (MCVE из того, что я понимаю), но он ничего не возвращает в моем коде. Возможно ли, что это противоречит предыдущим (закрытым) сканерам? – Koen

+0

Я удалил каждый in.close(); и теперь он отлично работает ... – Koen

+0

это может быть так, поскольку 'Scanner.close()' также закроет его базовый читаемый, в этом случае System.in, чтобы вы больше не могли читать System.in , – RandomHuman

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