Проверка ввода пользователя
Корректно обрабатывайте недопустимый ввод
«Проверка ввода пользователя» — бесплатный урок 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 — локальная установка не требуется.
Все уроки этого курса
- Чтение ввода с помощью Scanner
- Чтение чисел и строк
- Проверка ввода пользователя
- Альтернатива BufferedReader