0Pricing
Java Academy · Урок

Проверка ввода пользователя

Корректно обрабатывайте недопустимый ввод

«Проверка ввода пользователя» — бесплатный урок Java Academy на CoddyKit. Это урок 3 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Java Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Java Academy содержит 4 уроков всего.

Никогда не доверяйте вводу

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

В этом уроке показаны шаблоны корректной проверки ввода с помощью Scanner.

Проверяйте перед чтением

Самая простая проверка — это hasNextInt(). Считывайте целое число только тогда, когда оно действительно доступно.

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner("42");
        if (scanner.hasNextInt()) {
            System.out.println("Got: " + scanner.nextInt());
        } else {
            System.out.println("Please enter a number");
        }
        scanner.close();
    }
}

Повторение до получения допустимого значения

Цикл повторных попыток продолжает запрашивать данные, пока не будет введено допустимое целое число. Если токен неверен, удалите его с помощью next() и продолжите работу.

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner("abc xyz 50");
        int value = -1;
        while (scanner.hasNext()) {
            if (scanner.hasNextInt()) {
                value = scanner.nextInt();
                break;
            }
            scanner.next();
        }
        System.out.println("Accepted: " + value);
        scanner.close();
    }
}

Проверка диапазона

Важно проверять не только тип: значения часто должны находиться в определённом диапазоне. Считайте число, а затем проверьте его перед принятием.

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner("7");
        int n = scanner.nextInt();
        if (n >= 1 && n <= 10) {
            System.out.println("Valid: " + n);
        } else {
            System.out.println("Out of range");
        }
        scanner.close();
    }
}

Разбор с помощью try-catch

Другой вариант — считать всю строку, а затем разобрать её, перехватив NumberFormatException для недопустимого текста. Это упрощает работу с буфером.

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner("notanumber");
        String line = scanner.nextLine();
        try {
            int n = Integer.parseInt(line.trim());
            System.out.println("Parsed: " + n);
        } catch (NumberFormatException e) {
            System.out.println("Invalid number: " + line);
        }
        scanner.close();
    }
}

Проверка непустого текста

При вводе текста отклоняйте пустые значения. isBlank() возвращает true для пустых строк и строк, состоящих только из пробельных символов.

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner("   ");
        String name = scanner.nextLine();
        if (name.isBlank()) {
            System.out.println("Name cannot be empty");
        } else {
            System.out.println("Hello, " + name);
        }
        scanner.close();
    }
}

Проверка выбора

При выборе пункта меню убедитесь, что значение входит в список допустимых вариантов, прежде чем использовать его.

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner("y");
        String choice = scanner.next().toLowerCase();
        if (choice.equals("y") || choice.equals("n")) {
            System.out.println("You chose: " + choice);
        } else {
            System.out.println("Please enter y or n");
        }
        scanner.close();
    }
}

Повторно используемый метод проверки

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

public class Main {
    static boolean isValidAge(int age) {
        return age >= 0 && age <= 120;
    }

    public static void main(String[] args) {
        System.out.println(isValidAge(30));
        System.out.println(isValidAge(-5));
    }
}

Объединение проверки типа и диапазона

В реальных программах проверка часто объединяет проверку типа, проверку диапазона и цикл повторных попыток в одну надёжную процедуру.

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner("abc 200 45");
        int valid = -1;
        while (scanner.hasNext()) {
            if (scanner.hasNextInt()) {
                int n = scanner.nextInt();
                if (n >= 1 && n <= 100) {
                    valid = n;
                    break;
                }
            } else {
                scanner.next();
            }
        }
        System.out.println("Final: " + valid);
        scanner.close();
    }
}

Понятные сообщения об ошибках

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

public class Main {
    static String validate(String input) {
        if (input.isBlank()) return "Input is empty";
        if (!input.matches("\\d+")) return "Only digits allowed";
        return "OK";
    }

    public static void main(String[] args) {
        System.out.println(validate(""));
        System.out.println(validate("12a"));
        System.out.println(validate("123"));
    }
}

Стратегия проверки

Проверяйте тип с помощью методов семейства hasNext или конструкции try-catch, проверяйте диапазон и отсутствие пустого ввода, повторяйте попытки до получения допустимого значения и всегда понятно объясняйте ошибки.

Быстрая проверка

Проверьте свои знания о проверке ввода.

Итоги

Вы научились корректно проверять ввод:

  • Выполняйте проверку с помощью hasNextInt или разбирайте значение внутри конструкции try-catch
  • Используйте циклы повторных попыток, удаляя недопустимые токены с помощью next()
  • Проверяйте диапазоны и отклоняйте пустой текст с помощью isBlank
  • Выносите повторно используемую логику в методы проверки
  • Выводите понятные и конкретные сообщения об ошибках

Часто задаваемые вопросы

Урок «Проверка ввода пользователя» бесплатный?

Да — полный текст урока «Проверка ввода пользователя» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Java Academy, подпишись на CoddyKit PRO. Курс Java Academy содержит 4 уроков всего.

Чему я научусь в уроке «Проверка ввода пользователя»?

Корректно обрабатывайте недопустимый ввод Ты практикуешь Java Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

Нужен ли мне опыт, чтобы начать Java Academy?

Предыдущий опыт не требуется. Java Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 3 из 4.

Сколько времени занимает урок «Проверка ввода пользователя»?

Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.

Можно ли писать и запускать код в этом уроке Java Academy?

Да. Каждый урок Java Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.

Все уроки этого курса

  1. Чтение ввода с помощью Scanner
  2. Чтение чисел и строк
  3. Проверка ввода пользователя
  4. Альтернатива BufferedReader
← Назад к Java Academy