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
Комментарии (38)
ЧТОБЫ ПОСМОТРЕТЬ ВСЕ КОММЕНТАРИИ ИЛИ ОСТАВИТЬ КОММЕНТАРИЙ,
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ
Gans Electro Уровень 39
22 мая 2026
Если есть ошибки нужно напрямую писать админам. В вас есть кнопка с конвертом. Там можно писать Зепп Бранниган. Не можно а нужно. Именно комменты под лекциями они читают редко. Их слишком много
Yulia Loginova Уровень 4
12 мая 2026
ну вот, я нашла что STR."template" было экспериментальной функцией в 21-22 sdk и с 23-го уже удалено, так что в 25-й тем более не используется! печаль, выглядело так удобно
Yulia Loginova Уровень 4
7 мая 2026
А чего нельзя воспользоваться для формирования строки STR."template \{expression}"? вроде java25 же...
Fenix Уровень 1
2 мая 2026
Не забывайте закрывать сканер для освобождения ресурсов системы☝
Walter White Уровень 4
13 февраля 2026

int a = 5;
String s = "" + a;
// Ответ 5, но в опросе почему-то это неверный ответ...
Иван Уровень 3
6 марта 2026
ответ 5 - это int. int превращается в строку, поэтому твой ответ нужно завернуть в "".
Кэрривайт Уровень 6
3 февраля 2026
Снова пытаюсь одолеть Java
Павел Уровень 37
11 января 2026
Вот мы и начинаем погружаться в трясину ООП 😜
Anonymous #6490756 Уровень 3
16 апреля 2026
Пока еще не начали 😁 Только введение проходим
Павел Уровень 37
11 января 2026
Если бы 2 года назад в первом курсе с этим не разбирался, сейчас бы хрен чего понял. Это вам тут не Питон! 🙄
Soda Уровень 1
15 ноября 2025
а почему у класса и объекта одинаковые названия? Scanner название переменной = new Scanner(System.in); слева - название класса (сканнер), справа - название объекта, тоже сканнер. бывают ли случаи, когда название класса и объекта - разные?
Hiteke Уровень 5
20 ноября 2025
Не бывает т.к. Scanner это ключевое слово из наследуемого класса
Сергей Тыщенко Уровень 17
10 декабря 2025
- scanner - переменная хранящая ссылку на объект класса Scanner; - имя переменной может быть любое; - для удобства в качестве суффикса имени переменной в Венгерской нотации принято указывать на объект какого типа ссылается переменная, например Scanner valueScanner = new Scanner(); - если переменная временная с малым временем жизни/областью видимости - не мудрят и просто называют переменную по имени класса на чей объект она ссылается: Scanner scanner - new Scanner();
Popka Уровень 1
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 Уровень 5
9 декабря 2025
String s = "" + a; это буквально код для преобразования значения в данном случае а, в строку. это было в курсе несколько страниц назад.