Проблема с циклом

 
 
 
Сообщения:14
Подскажите, почему выполняется бесконечный цикл и не даёт ввести символы с клавиатуры? Пример из учебника.

public static void main(String[] args)
        throws java.io.IOException {
        
        char choice;
        
        do{
            System.out.println("Choose the number");
            System.out.println("1. morning");
            System.out.println("2. day");
            System.out.println("3. Evening");
            System.out.println("4. Night\n");
            
            choice = (char) System.in.read();

        } while(choice < '1' || choice > '4');
}
 
 
Сообщения:214
Тут почти все хорошо. Нет бесконечного цикла. Кто не дает ввести?

Что не очень хорошо - при вводе и нажатии enter-а вводится еще и переход строки. И если значение не между 1 и 4, то будет 2 раза выведен текст.
 
 
Сообщения:14
FarSeer:
Тут почти все хорошо. Нет бесконечного цикла. Кто не дает ввести?

Что не очень хорошо - при вводе и нажатии enter-а вводится еще и переход строки. И если значение не между 1 и 4, то будет 2 раза выведен текст.

У меня при запуске просто идет бесконечный цикл вывода этих четырех строк. Останавливается только принудительно.
 
 
Сообщения:214
На клавиатуре клавиша не залипла?? Ваш код у меня отрабатывает без бесконечного цикла. Да и запускать его нет необходимости, и так видно, что зацикливания нет.
Добавьте вывод символа, что он читает.
Изменен:21 авг 2020 21:57
 
 
Сообщения:14
FarSeer:
На клавиатуре клавиша не залипла?? Ваш код у меня отрабатывает без бесконечного цикла. Да и запускать его нет необходимости, и так видно, что зацикливания нет.
Добавьте вывод символа, что он читает.

Очень хочется разобраться. Не поленился, записал видео (700кб всего) https://yadi.sk/i/LhAUZFSlJ7LkTA
Он читает знак вопроса почему-то. И цикл бесконечный.
 
 
Сообщения:14
Я уже перегуглил всё. Не нахожу причины. Просто выводится зацикливание с таким ответом и всё тут :(

Choose the number
1. morning
2. day
3. Evening
4. Night


?
Choose the number
1. morning
2. day
3. Evening
4. Night


?
Choose the number
1. morning
2. day
3. Evening
4. Night


?
 
 
Сообщения:322
С кодом все нормально. На видео видно, что используется Netbeans. Вот видимо она и чудит со вводом или консолью. Сложно сказать, что там происходит, это среда разработки редко используется. Может быть, она пользовательский ввод вообще не поддерживает.

Если скомпилировать и запустить в консоли, то код будет работать правильно. И даже если скомпилировать в Netbeans и запускать в консоли - должно работать как полагается. Попробуйте, это не слишком сложно. И для обучения базовым вещам вполне достаточно. А потом на каком-то этапе вы выучите системы сборки и собирать будете все равно вне Netbeans (или что там у вас будет на тот момент).
 
 
Сообщения:14
Установил Intellij IDEA - код стал работать как надо. Спасибо. Буду писать в нем. Все хвалят.

А по поводу кода. Он работает нормально. Но если выйти за пределы, например ввести число больше 4, то код цикла срабатывает дважды. Почему так?

Choose the number
1. morning
2. day
3. Evening
4. Night

9 //Вот тут то, что вводим, а дальше цикл отрабатывает 2 раза.
Choose the number
1. morning
2. day
3. Evening
4. Night

Choose the number
1. morning
2. day
3. Evening
4. Night

 
 
Сообщения:127
Вопрос:
Denis47:
Но если выйти за пределы, например ввести число больше 4, то код цикла срабатывает дважды. Почему так?

Ответ был дан:
FarSeer:
при вводе и нажатии enter-а вводится еще и переход строки.


Добавь после присвоения переменной вывод считаного символа и его кода:
System.out.println("Считан символ: " + choice + " = " + (byte) choice);


Введи например 5555 и цикл будет выполнен 5 раз. 4 раза будет считан символ 5 и одно нажатие Enter(Символ новой строки).
Изменен:28 авг 2020 15:17
 
Модераторы:frymock
Сейчас эту тему просматривают:Нет