Я тестировал какой-то фрагмент кода и наткнулся на кое-что интересное, по которому мне нужно было мнение экспертов.
Простая программа, которая останавливает цикл, когда входом является s, но кажется, что на каждом входе цикл повторяется дважды, я думаю, это из-за задержки ввода-вывода. Поправьте меня, если я ошибаюсь.
public static void main(String[] args) throws java.io.IOException {
int i;
System.out.println("Type s to stop.");
for(i = 0; ; i++) {
char value = (char) System.in.read();
if (value=='s'){
break;
}
System.out.println("Pass # " + i);
}
}
выход:




Когда вы вводите char a в качестве входных данных, фактически вводятся два символа.
a\nНо когда вы читаете char, он читает один за другим. Следовательно, он закручивается дважды.
@XtremeBaumer Я не могу воспроизвести вашу проблему с повторением 3 раза в Windows. Вы используете Linux? Это может добавить \r\n после ввода символа. Это объясняет 3-х кратный цикл, я думаю
Это будет зацикливать длину введенного chars +1. Если вы введете ab, он будет повторяться 3 раза.
ab - это 2 символа. @PankajSinghal
Да. Вот что я сказал: если вы введете ab, он будет зацикливаться 3 раза для a, b, \n соответственно. Ситуация, с которой может столкнуться @XtremeBaumer.
Я нахожусь в Windows, и символы, которые он получает для ввода 1, - это 49, 13, 10. Похоже, у меня тоже \r\n на Windows
13 - это \r, а 10 - это \n. Итак, a\r\n - это то, что на самом деле вводится
Так что, возможно, печатать только тогда, когда !Character.isWhitespace(value)
@Lino Windows - это ОС, которая по умолчанию использует \ r \ n, Linux использует только \ n
@ErwinBolwidt, тогда я что-то перепутал. Пользуюсь windows но \r\n не встречал
Любое объяснение, почему он может даже повторяться 3 раза?