Как прочитать ввод пользователя
Короткий ответ
В Java 25 строку с клавиатуры читает IO.readln(). Можно передать подсказку — она будет выведена перед вводом:
void main() {
String name = IO.readln("Your name: ");
IO.println("Hello, " + name + "!");
}Результат:
Your name: Hello, Anna!Здесь пользователь ввёл Anna. Введённый текст в терминале появляется после подсказки, а в результате выше показан только вывод программы.
Число
readln() возвращает строку — число из неё получают через Integer.parseInt():
void main() {
int year = Integer.parseInt(IO.readln("Birth year: ").strip());
IO.println("Age in 2026: " + (2026 - year));
}Результат:
Birth year: Age in 2026: 36Повторять до правильного ввода
Спрашивайте снова, пока ввод не станет числом:
void main() {
while (true) {
String text = IO.readln("Quantity: ");
try {
int quantity = Integer.parseInt(text.strip());
IO.println("OK: " + quantity);
break;
} catch (NumberFormatException e) {
IO.println("Please enter a whole number.");
}
}
}Результат:
Quantity: Please enter a whole number.
Quantity: OK: 10Пользователь сначала ввёл ten, затем 10.
Scanner
В версиях до Java 25 используют Scanner. Он умеет читать числа и слова по отдельности:
void main() {
var scanner = new Scanner(System.in);
int a = scanner.nextInt();
int b = scanner.nextInt();
IO.println(a + " * " + b + " = " + a * b);
}Результат:
3 * 4 = 12Частая ошибка
Смешивать nextInt() и nextLine() у Scanner. nextInt() оставляет перевод строки в буфере, и следующий nextLine() сразу возвращает пустую строку:
void main() {
var scanner = new Scanner(System.in);
int age = scanner.nextInt();
String name = scanner.nextLine();
IO.println("age=" + age + ", name=[" + name + "]");
}Результат:
age=30, name=[]Читайте строки целиком через nextLine() или IO.readln() и разбирайте числа через parseInt().
Функции из этого ответа
- IO.readln() — Выводит подсказку и читает строку, которую ввёл пользователь.
- Scanner — Читает ввод по частям: строки целиком (nextLine) или отдельные слова и числа.
- Integer.parseInt() — Превращает строку с целым числом в int.