undefined

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

Java Syntax
3 уровень , 7 лекция
Открыта

— Амиго, настало твоё время — теперь я расскажу про ввод с клавиатуры.

— Для вывода данных на экран мы использовали System.out. Для ввода данных будем использовать  System.in.

— Звучит не сложно.

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

Пример 1
Ввод строки и числа с клавиатуры
InputStream inputStream = System.in;
Reader inputStreamReader = new InputStreamReader(inputStream);
BufferedReader bufferedReader = new BufferedReader(inputStreamReader);

String name = bufferedReader.readLine(); //читаем строку с клавиатуры
String sAge = bufferedReader.readLine(); //читаем строку с клавиатуры
int nAge = Integer.parseInt(sAge); //преобразовываем строку в число.
undefined
1
Задача
Java Syntax,  3 уровень,  7 лекция
Недоступна
Набираем код Ӏ Java Syntax: 3 уровень, 7 лекция
Java Syntax: 3 уровень, 7 лекция. Иногда думать не надо, строчить надо! Как ни парадоксально звучит, порой пальцы «запоминают» лучше, чем сознание. Вот почему во время обучения в секретном центре JavaRush вы иногда встречаете задания на набор кода. Набирая код, вы привыкаете к синтаксису и зарабатываете немного материи. А ещё — боретесь с ленью.
Пример 2
Более компактная запись первой части:
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));

String name = reader.readLine();
String sAge = reader.readLine();
int nAge = Integer.parseInt(sAge);
Пример 3
Еще более компактная
Scanner scanner = new Scanner(System.in);
String name = scanner.nextLine();
int age = scanner.nextInt();

— Вопросы?

— Эээ… Ничего не понятно.

— Чтобы считать строку с клавиатуры, удобнее всего воспользоваться объектом BufferedReader. Но для этого в него нужно передать объект, из которого он будет вычитывать данные – System.in.

— Но System.in и BufferedReader не совместимы друг с другом, поэтому мы используем переходник – еще один объект InputStreamReader.

— Вроде ясно. А что еще за класс Scanner?

— Использовать Scanner довольно удобно, но от этого не очень много пользы. Дело в том, что в будущем (и в учебе, и на работе) ты будешь часто использовать объекты BufferedReader и InputStreamReader и очень-очень редко объект типа Scanner. В данной ситуации он удобен, но в будущем толку от него мало. Так что мы пользоваться им не будем.

— Что-то вроде понятно, но не уверен, что все и правильно.

Комментарии (564)
Чтобы просмотреть все комментарии или оставить свой,
перейдите в полную версию
Romanya 23 уровень, Санкт-Петербург
6 марта 2021
Вот здесь по понятнее Считывание с клавиатуры Лайк, если статья была полезной.
Sardana 4 уровень, Якутск
21 февраля 2021
Я бы очень хотела получить ответ на один вопрос, для знатоков он конечно звучит глупо. Вот: "String x = reader.readLine(); int a = Integer.parseInt(x);" Это когда речь идёт о цифрах. Я понимаю, что в этом примере "x" - это цифра, которая с клавиатуры. В обеих строчках. В задачах, которые мы решаем, иногда просят писать: "int a = Integer.parseInt(reader.readLine());" Но я все равно пишу "Integer.parseInt(x)" -ну или любое подходящее, так как не знаю, что в таком случае писать наверху после Стринг. Надеюсь, правильно объяснила. Что вы пишете после Стринг, когда используете Integer.parseInt(reader.readLine()), а не тупо вписываете цифры в скобки после "Integer.parseInt"?
Dinara Smagulova 7 уровень
20 февраля 2021
Как хорошо, что я разобрала сначала Scanner и попробовала написать 3-4 задачи в Среде. Это существенно упростило мне разбор объекта BufferedReader.
2 + 2 9 уровень
19 февраля 2021
я так сильно привык к сканнеру, что аж удивилися этому новому bufferedReader
Sergey Badanin 7 уровень, Вологда
19 февраля 2021
Пойду лучше с Амиго пивка дерну🙃
piersto 9 уровень, Montreal
12 февраля 2021
'Но у System.in есть минус – он позволяет считать с клавиатуры только коды символов. Чтобы обойти эту проблему и считывать большие порции данных за один раз, мы будем использовать более сложную конструкцию' Что значит "считать с клавиатуры"??! 😥
Александр Sabbath 5 уровень, Киев
29 января 2021
Scanner работал как часы. но после прочтения что от него мало пользы пошел попробовать BufferedReader. BufferedReader отказал работать ругался на readLine(); Тут просто или оно должно быть интуитивно понятно или пропустил. Главный метод должен иметь:

public static void main(String[] args) throws Exception {
и без throws Exception не работает. пока прийму на веру
Antony Nikulyak 6 уровень, Владивосток
28 января 2021
Самая полезная статься, которую я видел! Несколько лет на Java писал софт через Scanner) Т.к. там все просто и понятно. Те же консольные крестики-нолики когда писал, через буфер не шли, ничего не компилировалось аоаоаоаоаао
Стас 14 уровень, Москва
25 января 2021
Надеюсь будет полезно : String sAge = reader.readLine(); - тут идет ввод с клавиатуры. Например 52. Но 52 это не число, а текст. С ним вы не можете сделать математическое действие, будет что-то типа: String sAge = 12 + "52" ( число плюс текст, что преобразуется с строковый тип) = "1252" - тоже текст int nAge = Integer.parseInt(sAge); - тут текст "52" преобразовывается в число 52. И теперь можно вычислить 12 + 52 = 64.
Игорь 27 уровень, Братск
12 января 2021
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in)); System.in - это переменная класса System привязанная к консоли, которая может читать с клавиатуры байты по одному, нормально работать можно только через цикл или нужно написать кучу одинаковых команд, чтобы хотя бы прочитать строку... InputStreamReader - это "переходник" между чтением байтов и символов, между InputStream и Reader. Он преобразует байты из System.in в символы, но также читает символы по одному. BufferedReader - это класс буфер, ускоряет работу программы и с ним можно адекватно работать без цикла. Он складывает в свой буффер символы(переменные типа char) из InputStreamReader, а потом склеивает их и возвращает вам одну строку с помощью метода readLine(); Если что-то не поняли это нормально.