2015-02-16 8 views
1

По какой-то причине, когда я нажимаю клавишу ENTER при использовании в цикле System.in.read(), код сразу же выполняет дважды. Если он не находится в цикле, он будет выполняться один раз! Почему это?Нажатие Enter Триггеры System.in.read() дважды?

Вот фрагмент кода, чтобы проверить:

while(true) { 
    System.in.read(); 
    System.out.println("I am supposed to print once, but I print twice!"); 
} 
+0

Хороший вопрос, но, пожалуйста, не «помечайте» свой вопрос словами в названии - мы уже видим, что это вопрос Java из ваших тегов, поэтому он также не должен быть в названии. –

+0

'13' =« Возврат каретки »,' 10' = «Новая строка» - это результат, который я получаю с консоли Windows при запуске вашего цикла. В принципе, он подбирает оба, как «ввести» ключевое состояние ... – MadProgrammer

+0

@QPaysTaxes Хорошо, не сделайте этого снова :) – Whirvis

ответ

-2

Причина вы испытываете это происходит потому, что при нажатии клавиши ввода, System.in.read() зарегистрирует два символа. Предполагается, что это будет использоваться как более сложная версия сканера, вместо использования сканера, где вы будете делать Scanner.nextLine() или Scanner.nextInt(), где он вернет строку или целое число, он возвращает все как символ код. Например, если бы я набрал «a» и нажал enter, он распечатал 97, 13 и 10 на консоли. Но если вы преобразовали первую цифру (97), отбросив ее на символ, используя (char) 97, вы получите «a» назад. Теперь, если вы посмотрите на последние два, это кнопка ввода. 13 - нажата кнопка ввода, а 10 - создание новой строки, когда кнопка ввода отпускается. Таким образом, всякий раз, когда вы нажимаете кнопку, это вызывает System.in.read() и, таким образом, запускает код в цикле. Но он также сделает это снова, когда вы отпустите, потому что вы только что вызвали его, выпустив кнопку ввода, которая также запускает System.in.read(). Итак, для того, чтобы исправить это, сделать это:

while(true) { 
    if(System.in.read() == 13) { 
     System.out.println("I now only execute once like I should! :D"); 
    } 
} 

Вы также можете сделать 10, если вам нравится, но я предпочитаю использовать 13. Надеюсь, что это помогает!

+1

«13 нажата кнопка, а 10 - кнопка отпускания» - полная глупость. – immibis

+0

@immibis Что значит? – Whirvis

+0

@immibis Nevermind, узнал, что вы имели в виду. Редактирование прямо сейчас. – Whirvis

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