Пользовательский ввод в Java
Научимся читать данные от пользователя в Java через класс Scanner: числа, строки, и разберём классическую ловушку с nextLine().
Чтобы программа реагировала на пользователя, ей нужно читать ввод. В Java для этого чаще всего используют класс
Scannerиз пакетаjava.util.
Подключение Scanner
Класс Scanner нужно импортировать, а затем создать объект, связанный со стандартным потоком ввода System.in:
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.print("Как тебя зовут? ");
String name = scanner.nextLine();
System.out.println("Привет, " + name + "!");
}
}
Если пользователь введёт Аня, программа выведет:
Как тебя зовут? Аня Привет, Аня!
Методы чтения
У Scanner для каждого типа данных свой метод:
Метод | Что читает |
| целое число ( |
| число с дробной частью ( |
| всю строку целиком, включая пробелы |
| одно «слово» до пробела |
| логическое значение ( |
Scanner scanner = new Scanner(System.in);
System.out.print("Введите возраст: ");
int age = scanner.nextInt();
System.out.print("Введите рост в метрах: ");
double height = scanner.nextDouble();
System.out.println("Через год вам будет " + (age + 1));
Ловушка nextLine() после nextInt()
Это ошибка, на которую попадаются почти все новички. Методы вроде nextInt() читают число, но не забирают символ перевода строки после него. Следующий nextLine() «съедает» этот остаток и возвращает пустую строку.
int age = scanner.nextInt();
String city = scanner.nextLine(); // вернёт пустую строку — баг!
Решение — добавить «холостой» nextLine(), чтобы сбросить остаток строки:
int age = scanner.nextInt();
scanner.nextLine(); // сбрасываем перевод строки
String city = scanner.nextLine(); // теперь читается корректно
Правило простое: если после
nextInt()/nextDouble()нужно прочитать строку черезnextLine()— вставьте между ними один холостойscanner.nextLine().
Коротко
- Ввод читают через
Scanner: импортjava.util.Scanner+new Scanner(System.in). - Для каждого типа свой метод:
nextInt(),nextDouble(),nextLine(),next(). - После
nextInt()вставляйте холостойnextLine(), иначе следующая строка прочитается пустой.