Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Java программирование > Общие вопросы по Java, Java SE, Kotlin
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 21.10.2021, 01:11   #1
Sergey_R
Пользователь
 
Регистрация: 13.03.2021
Сообщений: 19
По умолчанию программа, запрограммированная на ввод числа пользователя, после которого запускается цикл

подскажите, есть некая программа, запрограммированная на ввод числа пользователя, после которого запускается цикл, работающий до тех пор пока пользователь не введет нужное число. При вводе не числа, программа ожидаемо выдает ошибку, которую я обработал с помощью Try/Catch, однако после обработки цикл запускается в бесконечном порядке. Как сделать чтобы цикл продолжился с вводом числа пользователем. ЯП JAVA.
Код:
while (userInput != randomInt) {
            try {
                userInput = scanner.nextInt();
            } catch (NoSuchElementException e) {
                System.out.println("Вы ввели не число, пожалуйста введите число!");                
            }
            if (randomInt < userInput)
                System.out.println("Меньше");
            else if (randomInt > userInput)
                System.out.println("Больше");
            else
                System.out.println("Верно!");
        }
Sergey_R вне форума Ответить с цитированием
Старый 21.10.2021, 05:41   #2
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,291
По умолчанию

А так?
Код:
do {
    try {
        userInput = scanner.nextInt();
    } catch (NoSuchElementException e) {
        System.out.println("Вы ввели не число, пожалуйста введите число!");   
        scanner.nextLine();
        continue;
    }
    if (randomInt < userInput)
        System.out.println("Меньше");
    else if (randomInt > userInput)
        System.out.println("Больше");
    else
        System.out.println("Верно!");
    scanner.nextLine();
} while (userInput != randomInt);
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )

Последний раз редактировалось BDA; 21.10.2021 в 17:22.
BDA на форуме Ответить с цитированием
Старый 21.10.2021, 17:28   #3
ViktorR
Старожил
 
Регистрация: 23.10.2010
Сообщений: 2,309
По умолчанию

Задайте вопрос в поисковике в виде: "scanner.nextInt() java"
Узнаете много интересного о таком методе чтения данных.
Заодно обратите внимание на scanner.nextLine().
Я на Java не писал, но поисковик сразу дал подсказку.


Цитата:
nextInt пропускает все пробельные символы начиная с текущей позиции до первого символа числа, затем читает до тех пор пока идут числовые символы (останавливается, когда встречает пробельный символ или символ перевод строки, иначе падает с исключением).
Что-то не сразу увидел ответ.
Как-то так, ...
ViktorR вне форума Ответить с цитированием
Старый 21.10.2021, 17:33   #4
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,291
По умолчанию

Цитата:
Сообщение от ViktorR Посмотреть сообщение
Что-то не сразу увидел ответ.
Да сначала написал другое и удалил, а потом нагуглил про nextInt и восстановил сообщение с кодом.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA на форуме Ответить с цитированием
Старый 21.10.2021, 19:55   #5
Sergey_R
Пользователь
 
Регистрация: 13.03.2021
Сообщений: 19
По умолчанию

BDA, спасибо, так работает прекрасно )
Sergey_R вне форума Ответить с цитированием
Старый 01.11.2021, 13:08   #6
Sergey_R
Пользователь
 
Регистрация: 13.03.2021
Сообщений: 19
По умолчанию

BDA, а если в цикле несколько вложенных циклов, получается что данный способ возвращается к началу основного цикла, как сделать чтоб программа возвращалась к циклу на котором произошла обработка ошибки?
Sergey_R вне форума Ответить с цитированием
Старый 01.11.2021, 13:43   #7
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,291
По умолчанию

Вынести ввод числа в отдельную функцию, где разместить цикл перезапроса числа и try, а затем внутри вложенных циклов вызывать эту функцию.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA на форуме Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Права юзера от которого запускается web сервер в Linux rownong Linux (Ubuntu, Debian, Red Hat, CentOS, Mint) 1 11.02.2019 21:59
почему программа закрывается сразу после ввода и не выполняет if и цикл? ew0 Помощь студентам 2 28.03.2017 01:56
программа перестает работать как только запускается бесконечный цикл Lizard123128 Паскаль, Turbo Pascal, PascalABC.NET 1 11.08.2015 15:25
Номер символа, после которого находится курсор. Delphi -Yevgeniy- Помощь студентам 8 28.03.2011 10:53
Евклид - программа должна запрашивать у пользователя 2 числа и считать их НОД amfisat Помощь студентам 2 17.09.2010 09:53