Защита от ввода множества строк

193
02 января 2022, 02:00

Пользователь с клавиатуры вводит некую информацию, если она не соответствует заранее заданным критериям, то выводится сообщение об ошибке. При вводе из буфера обмена нескольких несоответствующих строчек программа каждую строку считывает отдельно, и выводит столько сообщений с ошибками, сколько строк было введено. То есть пользователь из буфера обмена вставляет несколько строчек, и каждая успевает восприняться как отдельный ввод, в результате чего выводится куча ошибок. Как заставить программу в таком случае выводить лишь одно сообщение с ошибкой?

public static int Input(int min, int max, int h) {
        Scanner in = new Scanner(System.in);
        int a = -1; // Введённое число.
        String str = "";
        do {
            Output(h, max);
            str = in.nextLine();
            str = str.replaceAll("\\s+", "");
            if (str.isEmpty()) {
                System.out.println("Вы ничего не ввели!\n");
            }
            else {
                try {
                    a = Integer.parseInt(str);
                    if (a < min || a > max) {
                        throw new NumberFormatException();
                    }
                } catch (NumberFormatException e) {
                    a = -1;
                    System.out.println("Введённые данные неверны! Попробуйте снова.\n");
                }
            }
        } while (a == -1);
        return a;
    }
Answer 1

Можно ввести дополнительную переменную, в которой хранить состояние - уже выводили этот текст или еще нет:

Scanner in = new Scanner(System.in);
int a = -1; // Введённое число.
String str = "";
boolean errorShown = false; // здесь храним показывалось ли сообщение
...
catch (NumberFormatException e) {
    a = -1;
    if (!errorShown) { // сообщение об ошибке еще не было показано
        System.out.println("Введённые данные неверны! Попробуйте снова.\n");
        errorShown = true;
    }     
}

Если же нужно совсем остановить цикл, то просто break после первого вывода сообщения:

catch (NumberFormatException e) {
    a = -1;
    System.out.println("Введённые данные неверны. До свидания!");
    break;
}
READ ALSO
Получить имя созданного объекта?

Получить имя созданного объекта?

У меня все созданные объекты идут в список(ArrayList):

173
Нереальный индекс -1

Нереальный индекс -1

В список с клавиатуры пишу стринги, на экран нужно вывести индекс первой стринги которая меньше предыдущей, пример:

185
Получение значения с android context

Получение значения с android context

Всем приветПереписываю некоторые методы с android приложения для реализации их чисто на java

219