Пользовательский ввод в 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 для каждого типа данных свой метод:

Метод

Что читает

nextInt()

целое число (int)

nextDouble()

число с дробной частью (double)

nextLine()

всю строку целиком, включая пробелы

next()

одно «слово» до пробела

nextBoolean()

логическое значение (true/false)

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(), иначе следующая строка прочитается пустой.
Проверьте себя
1. Какой класс чаще всего используют для чтения ввода в Java?
AReader
BInput
CSystem
DScanner
2. Что вернёт nextLine() сразу после nextInt(), если не сбросить остаток строки?
AВведённую строку
BОшибку
CПредыдущее число
DПустую строку
3. Каким методом прочитать всю строку с пробелами?
Anext()
BnextWord()
CnextString()
DnextLine()