Форум программистов, компьютерный форум, киберфорум
Java SE (J2SE)
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.96/47: Рейтинг темы: голосов - 47, средняя оценка - 4.96
0 / 0 / 1
Регистрация: 25.10.2012
Сообщений: 87
1

Ввод с клавиатуры - требовать у пользователя ввод, пока он не будет корректным

07.03.2017, 20:36. Показов 9810. Ответов 4
Метки нет (Все метки)

Поискал в интернете и тут - не могу найти ответ на свой вопрос.
Основная проблема - фильтровать введённые данные пользователя (введённые с клавиатуры). То есть нужно, если пользовать ввёл не те данные, опять запрашивать у него ввод. И так продолжать, пока пользователь не введёт то, что нужно.
Со строкой вроде разобрался, а вот если число надо вводить, да и ещё в каком-то диапазоне, то не могу это сделать. Подскажите, как?

Добавлено через 18 минут
...Попробовал. Такой код наклепал:
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
    public int getUserInput() throws IOException {
        BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
        //Scanner sc = new Scanner(System.in);
 
        System.out.print("\nВыберете пункт меню: ");
 
        boolean isCorrectInput = false;
        int menuItemInput = -1;
        int menuSize = menu.size();
        while (!isCorrectInput) {
            try {
                menuItemInput = Integer.parseInt(reader.readLine());
            }
            catch (NumberFormatException e) {
                isCorrectInput = false;
                continue;
            }
            catch (Exception e) {
                isCorrectInput = false;
                continue;
            }
            //if (sc.hasNextInt()) menuItemInput = sc.nextInt();
            if (menuItemInput >= 1 && menuItemInput <= menuSize)
                isCorrectInput = true;
        } 
 
        return menuItemInput;
Вроде корректно работает. Через сканнер что-то не получилось.
__________________
Помощь в написании контрольных, курсовых и дипломных работ здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
07.03.2017, 20:36
Ответы с готовыми решениями:

Ввод цифр с клавиатуры до тех пор, пока не будет введена цифра 1
Используя оператор цикла do while, составить программу, которая будет требовать ввод цифр с...

Ввод с клавиатуры до тех пор, пока не будет введен определенный символ
Задание: Написать программу, позволяющую вводить с клавиатуры символы до тех пор, пока не будет...

Ввод чисел с клавиатуры до тех пор, пока не будет введена цифра 1 (цикл do)
Используя оператор цикла do, составить программу, которая будет требовать ввод чисел с клавиатуры...

Ввод целых чисел с клавиатуры до тех пор, пока не будет введено отрицательное число
Помогите пожалуйста написать прогу. 2.Запишите блок-схуму алгоритма ввода целых чисел с...

4
Автоматизируй это!
Эксперт Python
5040 / 3507 / 1001
Регистрация: 30.03.2015
Сообщений: 10,751
Записей в блоге: 29
07.03.2017, 20:42 2
также как и со строкой - считываешь в цикле и если входит в нужный диапазон то выход из цикла иначе возврат к вводу
0
0 / 0 / 1
Регистрация: 25.10.2012
Сообщений: 87
08.03.2017, 08:44  [ТС] 3
Welemir1, так если пользователь ввёл не число, а букву, то там просто так не переведёшь строку в число. Нужно, чтобы, если пользователь ввёл не число, а букву, у него опять запрашивался ввод с клавиатуры.
Пока вот как решил этот вопрос - с исключениями. Но выглядит как-то коряво. Думаю, есть решение лучше.
0
Автоматизируй это!
Эксперт Python
5040 / 3507 / 1001
Регистрация: 30.03.2015
Сообщений: 10,751
Записей в блоге: 29
08.03.2017, 12:50 4
ну так проверяй то что он ввел, считывай именно строку, посимвольно проверяй что это числа и дальше по результату
0
2881 / 2293 / 769
Регистрация: 12.05.2014
Сообщений: 7,978
08.03.2017, 13:06 5
без особого рефакторинга
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
import java.util.Scanner;
 
public class JavarushVictim {
 
    private static final int FROM = 1;
    private static final int TO = 5;
 
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.println("Введите число от 1 до 5: ");
        while (true) {
            String line = sc.nextLine();
            if (isNumber(line)) {
                int value = Integer.valueOf(line);
                if (isInRange(value, FROM, TO)) {
                    System.out.println("Правильный ввод. Делаем что-то очень важное.");
                    break;
                } else {
                    System.out.printf("Я же просил ввести число от %d до %d. Еще раз...%n", FROM, TO);
                }
            } else {
                System.out.println("Я же просил ввести число. Еще раз...");
            }
        }
    }
 
    private static boolean isInRange(int value, int from, int to) {
        return value >= from && value <= to;
    }
 
    private static boolean isNumber(String str) {
        return str.matches("-?\\d+");
    }
}
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
08.03.2017, 13:06

Напишите программу, в которой осуществляется ввод целых чисел, ввод осуществляется до тех пор пока не будет введен ноль
Напишите программу, в которой осуществляется ввод целых чисел (ввод осуществляется до тех пор пока...

Написать программу которая будет требовать пароль до тех пор пока он не будет введен верно
Написать программу которая будет требовать пароль до тех пор пока он не будет введен верно.

Ввод пароля пока не будет введен верный
Давно писал код и сейчас хочу продолжить его и вот как выполнить чтобы ввод пароля можно было...

Ввод строк, пока не будет нажат Enter
как вводить строки, пока не будет нажат enter? пример: 2 2 3 3 5 5 6 7 3 5 6 3 4 5 То...

Ввод не прекращать пока число не будет равно 0
Допустим на вход нам даются числа и записываются они в динамичный массив(List&lt;int&gt;) Я хочу сделать...

Вводить пятизначное число пока не будет введено правильноеповторять ввод, пока не будет введено пятизначное число. Не получается выполнить задание.
#include &lt;iostream&gt; using namespace std; int main() { setlocale(LC_ALL, &quot;rus&quot;); cout &lt;&lt;...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru