JavaRush /Курсы /JAVA 25 SELF /Ввод с клавиатуры

Ввод с клавиатуры

JAVA 25 SELF
2 уровень , 5 лекция
Открыта

1. Чтение с консоли, System.in

В предыдущих лекциях мы познакомились с командами вывода на экран. Для этого мы использовали объект System.out и его методы print() и println(). Просто и удобно.

Но, как вы уже, наверное, догадываетесь, одного вывода на экран недостаточно. Цель большинства программ — сделать что-то полезное для пользователя. Поэтому очень часто нужно, чтобы пользователь мог вводить данные с клавиатуры.

Как и для вывода, для ввода данных тоже есть специальный объект — System.in. Но, к сожалению для нас, он не настолько удобен, как нам бы хотелось. Этот объект позволяет считывать данные с клавиатуры, но только по одному символу за раз.

Поэтому мы воспользуемся еще одним классом, который в паре с объектом System.in даст нам все, что нужно. В Java уже давно есть классы на все случаи жизни. И с одним из них мы сейчас и познакомимся.

2. Класс Scanner

Класс Scanner (полное имя java.util.Scanner) умеет считывать данные из разных источников: консоль, файлы, интернет. Если мы хотим, чтобы он считывал данные с клавиатуры, мы должны передать ему объект System.in в качестве параметра – источника данных. А уж объект типа Scanner сам разберется, что с ним делать.

Считывание с клавиатуры с помощью объекта типа Scanner будет выглядеть примерно так:

Код Пояснение
Scanner console = new Scanner(System.in);
String name = console.nextLine();
int age = console.nextInt();
Создаем объект класса Scanner. Читаем с клавиатуры строку текста. Читаем с клавиатуры число.

Выглядит вроде несложно, но так ли все просто на самом деле?

Думаю, у вас появилась куча вопросов, и сейчас мы на них ответим.

Но для начала продемонстрируем пример полной программы, где используется класс Scanner:

void main()
{
    Scanner console = new Scanner(System.in);
    String name = console.nextLine();
    int age = console.nextInt();

    System.out.println("Name: " + name);
    System.out.println("Age: " + age);
}

3. Создание объекта Scanner

Первый вопрос – что это за строка Scanner console = new Scanner(System.in);?

Такая строка может сбивать с толку, однако вы будете постоянно встречать похожие вещи. Так что, думаю, настало время объяснить, что тут написано.

Вспомним, как мы обычно создаем переменную с текстом:


String str = "текст";
Объявление и инициализация строковой переменной

Сначала мы пишем тип переменной (String), затем ее имя (str) и, наконец, после знака равенства пишем значение.

В нашей странной строке на самом деле все то же самое:


Scanner console = new Scanner(System.in);
Объявление и инициализация переменной типа Scanner

Все, что находится слева от знака равенства — это объявление переменной типа Scanner по имени console. Можно было назвать ее, например, s или scanner, или даже keyboard. Тогда код выглядел бы так:

Scanner s = new Scanner(System.in);
String name = s.nextLine();
int age = s.nextInt();
Scanner scanner = new Scanner(System.in);
String name = scanner.nextLine();
int age = scanner.nextInt();
Scanner keyboard = new Scanner(System.in);
String name = keyboard.nextLine();
int age = keyboard.nextInt();

Думаю, теперь все стало гораздо понятнее.

А код, что находится справа от знака равенства, немного сложнее. Я имею в виду new Scanner(System.in); Но тут тоже ничего космического.

В этом коде мы говорим Java-машине: создай новый объект (слово new) типа Scanner и передай в него в качестве параметра то, из чего новосозданный объект Scanner будет брать данные — объект System.in.

После выполнения всей этой строки у нас появится переменная по имени console типа Scanner, с помощью которой наша программа сможет считывать данные с клавиатуры.

4. Вызов методов

В приведенном выше примере наша переменная console типа Scanner хранила у себя внутри ссылку на объект типа Scanner.

Чтобы вызвать методы объекта, на который ссылается переменная, нужно после имени переменной написать точку, а затем имя метода и параметры. Общий вид этой команды такой:


переменная.метод(параметры);
Вызов метода объекта, на который ссылается переменная

Примеры:

System.out.println("Привет");
System.out.println(1);

Если вы не планируете передавать в функцию параметры, нужно писать просто пустые скобки:


переменная.метод();
Вызов метода без передачи параметров

Пример:

System.out.println();

5. Ввод данных с консоли

Вводить данные с клавиатуры, когда у нас есть объект типа Scanner, очень легко.

Чтобы считать с клавиатуры строку, нужна команда:


String str = console.nextLine();

Когда программа дойдет до выполнения этой строки, она приостановится и будет ждать, пока пользователь введет данные и нажмет клавишу Enter. После этого все, что ввел пользователь, будет сохранено в переменную str.

Чтобы считать с клавиатуры число, нужна команда:


int number = console.nextInt();

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

Если пользователь ввел данные, которые невозможно преобразовать в целое число, в программе возникнет ошибка, и она завершится.

Чтобы считать с клавиатуры дробное число, нужна команда:

double number = console.nextDouble();

Эта команда полностью аналогична команде nextInt(), только она проверяет, что введенные данные можно преобразовать в число double.

Пример программы, которая считывает с клавиатуры два числа и выводит их сумму:

void main()
{
    Scanner console = new Scanner(System.in);
    int a = console.nextInt();
    int b = console.nextInt();

    System.out.println(a + b);
}

Примечание

Пользователь может ввести несколько чисел в одной строке, разделив их пробелами: такая ситуация будет корректно обработана методами класса Scanner. Однако числа будут считаны программой только после того, как пользователь нажмет Enter.

1
Задача
JAVA 25 SELF, 2 уровень, 5 лекция
Недоступна
Получение пароля 🔒
Получение пароля 🔒
1
Задача
JAVA 25 SELF, 2 уровень, 5 лекция
Недоступна
Регистрация нового игрока 🎮
Регистрация нового игрока 🎮
1
Задача
JAVA 25 SELF, 2 уровень, 5 лекция
Недоступна
Подсчет общей стоимости покупок 🛒
Подсчет общей стоимости покупок 🛒
1
Задача
JAVA 25 SELF, 2 уровень, 5 лекция
Недоступна
Создание визитной карточки 📇
Создание визитной карточки 📇
1
Опрос
Знакомство с типами int и String, 2 уровень, 5 лекция
Недоступен
Знакомство с типами int и String
Знакомство с типами int и String
Комментарии (33)
ЧТОБЫ ПОСМОТРЕТЬ ВСЕ КОММЕНТАРИИ ИЛИ ОСТАВИТЬ КОММЕНТАРИЙ,
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ
Walter White Уровень 4
13 февраля 2026

int a = 5;
String s = "" + a;
// Ответ 5, но в опросе почему-то это неверный ответ...
Иван Уровень 5
6 марта 2026
ответ 5 - это int. int превращается в строку, поэтому твой ответ нужно завернуть в "".
Anonymous #1883657 Уровень 8
3 февраля 2026
Снова пытаюсь одолеть Java
Павел Уровень 11
11 января 2026
Вот мы и начинаем погружаться в трясину ООП 😜
Павел Уровень 11
11 января 2026
Если бы 2 года назад в первом курсе с этим не разбирался, сейчас бы хрен чего понял. Это вам тут не Питон! 🙄
Soda Уровень 11
15 ноября 2025
а почему у класса и объекта одинаковые названия? Scanner название переменной = new Scanner(System.in); слева - название класса (сканнер), справа - название объекта, тоже сканнер. бывают ли случаи, когда название класса и объекта - разные?
Hiteke Уровень 5
20 ноября 2025
Не бывает т.к. Scanner это ключевое слово из наследуемого класса
Сергей Тыщенко Уровень 29
10 декабря 2025
- scanner - переменная хранящая ссылку на объект класса Scanner; - имя переменной может быть любое; - для удобства в качестве суффикса имени переменной в Венгерской нотации принято указывать на объект какого типа ссылается переменная, например Scanner valueScanner = new Scanner(); - если переменная временная с малым временем жизни/областью видимости - не мудрят и просто называют переменную по имени класса на чей объект она ссылается: Scanner scanner - new Scanner();
Popka Уровень 24
21 декабря 2025
У класса и у объекта одинаковые названия, потому что объект - это реализация этого самого класса. Т.е. если есть класс Home, то мы можем создать его объект - new Home(). Причем на одном классе мы можем создавать много объектов - в этом фишка. Home первый дом = new Home(); Home второй дом = new Home(); Это будут 2 разных объекта, но они оба основываются на одном классе Home - т.е. у них одинаковые методы, одинаковая логика и т.д. И Каждый из этих объектов мы уже после их создания можем менять как мы захотим. Например первый дом мы можем сделать большим, а второй маленьким. Но изначально они одинаковые. "бывают ли случаи, когда название класса и объекта - разные? " - да бывает. Дело в том что классы могут друг от друга наследоваться. Например класс Garage может наследоваться от класса Home. Т.е. Garage будет иметь все тоже самое что и Home, но у него будут свои уникальные черты, которые мы ему можем добавить, например, большую дверь. Т.е. будет строится иерархия Home - родитель, Garage - его сын. И в таком случае мы можем сделать следующее: Home garage1 = new Garage(); Garage garage2 = new Garage(). Но про это лучше почитать отдельно т.к. там много нюансов
SergeySorok Уровень 4
12 октября 2025
Один вопрос ответил неверно (ответил просто: 5 ): Какой результат выполнения кода: int a = 5; String s = "" + a; Разве нет? =/
DimaSergeew Уровень 3
22 октября 2025
У тебя 5 преобразуется в строку там не будет значение 5 там будет 5 строковая т.е "5"
Xaxatumba Уровень 38
3 ноября 2025
Если выполнить такой код int a = 5; String s = "" + a; System.out.println(s); Ответ получается: 5 Без кавычек. Так что формально ответ 5 верный. Формулировку ответов нужно подправить.
Serg Lyalenko Уровень 4
4 ноября 2025
Формально, любое безобразие можно оправдать
Ultralyd Уровень 4
9 декабря 2025
String s = "" + a; это буквально код для преобразования значения в данном случае а, в строку. это было в курсе несколько страниц назад.
Ловкий Лев Уровень 21
2 октября 2025
Интересует следующий момент, нигде не вижу вызова метода .close() для объектов класса Scanner, это особенность Java 25? Или с чем это связано? В дальнейших лекциях также не встретил вызов метода .close()
Антон Карпов Уровень 32
14 октября 2025
Дело не в версии Java. Scanner закрывают тогда, когда ты владеешь ресурсом (нпр. чтение из файла) Scanner, созданный с System.in не закрывают, потому что scanner.close() закроет и сам System.in и последующие попытки читать из стандартного ввода дадут Exception. Например, ты хочешь создать два сканнера с System.in, при закрытии первого, второй уже не сможет ничего прочитать:

        Scanner scanner = new Scanner(System.in);
        String line = scanner.nextLine();
        System.out.println("First input: " + line);

        scanner.close();

        Scanner scanner2 = new Scanner(System.in);
        String secondLine = scanner2.nextLine(); // NoSuchElementException...
        System.out.println("Second input: " + secondLine);
А close() в учебных примерах опускают, чтобы не отвлекать внимание на детали вроде закрытия потоков.
Ловкий Лев Уровень 21
15 октября 2025
Понял, благодарю за развернутый ответ.
Владислав Уровень 39
30 сентября 2025
В последнем вопросе теста, чем конструкция "String name = console.nextLine()"; отличается от конструкции: String name = scanner.nextLine();? В вопросе не указано как был назван объект типа Scanner. Он может быть каким угодно. Может кто то пояснить? Варианты были оба в тестовом вопросе и они оба правильные. Например в задаче "Регистрация нового игрока", у меня было в решении такая часть кода: Scanner scanner = new Scanner(System.in); // Запрашиваем и считываем имя игрока String name = scanner.nextLine(); // Запрашиваем и считываем возраст игрока int year = scanner.nextInt();
Sdsadasd Уровень 15
12 октября 2025
Там присмотрись объект назван как Scanner с большой, а не с маленькой. А в джаве принято называть переменные по правилу camelCase нотации. То есть всегда начинается с маленькой, а последующие начала слов пишутся с большой, как горбы у верблюда.
Shanechka Уровень 54
8 сентября 2025
А у меня и одной нет в консоли что вводится и в итоге как слепой котенок все задачки делаю, неприкольно(
Kidze Уровень 26
9 сентября 2025
Так вводи сама.
Alina Gabidulina Уровень 32
14 сентября 2025
да суть задачи не в том, чтобы ты видела, что вводят в консоль, а в том, чтобы ты созала сканер и использовала его методы, а когда пишешь System.in уже и появляется окно консоли
Stunsole Уровень 6
8 сентября 2025
топовый компилятор, написал в таком формате System.out.println("Возраст игрока: " + playerAge); System.out.println("Имя игрока: " + playerName); ошибка, вначале возраст числом, потом имя, удалил то что в кавычках - приняло
dimonpokemon Уровень 3
8 сентября 2025
ну так тебя не происили же писать что то в скобках
Kidze Уровень 26
9 сентября 2025
Сравнивает ответы твои с нужными, если нужен прям текст по шаблону, то это указывается в условии как в последней задаче.
Vlad Privalov Уровень 11
15 сентября 2025
Мне компилятор не засчитал ответ из-за отсутствия точки в конце)
Victor Уровень 16
17 сентября 2025
Vlad Privalov, это наверное был не компилятор, а валидатор
Stunsole Уровень 6
22 сентября 2025
Вы создаёте умный термостат. Объявите переменную int с именем roomTemperature. Создайте переменную типа boolean с именем isComfortable, которая станет true, если roomTemperature находится в комфортном диапазоне от 20 до 25 градусов включительно. Выведите значение isComfortable на экран. Требования: В программе должна быть объявлена переменная типа int с именем roomTemperature. В программе должна быть объявлена переменная типа boolean с именем isComfortable. Переменная isComfortable должна быть равна true, если значение roomTemperature находится в диапазоне от 20 до 25 включительно. Программа должна выводить значение переменной isComfortable на экран. тут меня тоже не просят присвоить число переменной roomTemperature, но если я этого не сделаю программа не сможет вычислить условия, так что не всегда меня просят что-то сделать