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

Открыта

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

— Для вывода данных на экран мы использовали 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); //преобразовываем строку в число.
4
Задача
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. В данной ситуации он удобен, но в будущем толку от него мало. Так что мы пользоваться им не будем.

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

Комментарии (202)
  • популярные
  • новые
  • старые
Для того, чтобы оставить комментарий вы должны авторизоваться
Александра3 уровень, Москва
вторник, 13:15
Я извиняюсь за тупой вопрос, но я с абсолютного нуля, поэтому - что вообще означает ввод данных с клавиатуры? Для чего это надо?
j3ster4 уровень
вторник, 16:16
Это означает, что, например, в какую-нибудь перемеренную мы можем занести значение непосредственно во время работы программы, а не в самом коде. Можно написать:
String a = "Александра";
А можно объявить эту переменную, а уже во время работы программы с клавиатуры ввести нужные нам данные.
Maxim4 уровень
вторник, 19:24
А если еще проще, то когда вы вводите свои логин и пароль при входе на фейсбук, например, то грубо говоря "программа считывает ввод с клавиатуры". Когда вы играете в видеоигру, она считывает ввод с клавиатуры прямо в процессе игры (когда вы нажимаете кнопки управления, вводите имя и прочее).
Александра3 уровень, Москва
позавчера, 09:34
Спасибо! Вот теперь понятно))
Marina5 уровень, Екатеринбург
16 февраля, 09:35
https://javarush.ru/groups/posts/1919-schitihvanie-s-klaviaturih--riderih после видео и чтения этого материала + разбора примеров в Idea стало все понятно
Evgeny Ilin4 уровень, Самара
14 февраля, 20:39
Очень важное дополнение по теме последнего примера! https://ru.stackoverflow.com/questions/526818/scanner-%D0%BD%D0%B5-%D1%81%D1%87%D0%B8%D1%82%D1%8B%D0%B2%D0%B0%D0%B5%D1%82-%D1%81%D1%82%D1%80%D0%BE%D0%BA%D1%83-%D0%BF%D0%BE%D1%81%D0%BB%D0%B5-nextint
8 февраля, 14:20
советую в дополнение к теме: https://www.youtube.com/watch?v=PZa7LEY_7LM
Игорь7 уровень, Москва
24 января, 16:51
Друзья, а как ввести дробное число с помощью этого блока команд ? Ну то есть как вводить строку понятно: String name = reader.readLine(); Как вводить целое число понятно : String sAge = reader.readLine(); int nAge = Integer.parseInt(sAge); А чтобы ввести дробное число , например 3.5 , нужно поменять на что-то :int nAge = Integer.parseInt(sAge); кто знает ?
Игорь7 уровень, Москва
24 января, 17:09
сам нашел double nAge = Double.parseDouble(sAge);
Georgy6 уровень
10 января, 13:25
а что такое Reader в первом примере? это новая ссылка на инпутстримридер? как она потом используется в коде? ничего непонятно ((
Marat9 уровень, Одесса
12 января, 00:29
Это родительский класс ридеров вот тут структура видна https://javarush.ru/groups/posts/593-bufferedreader-i-bufferedwritter В IDEA чтоб увидеть дерево выдели элемент например InputStreamReader и жми Сtrl+Н
Alexander Pyankov16 уровень
3 января, 23:48
Более подробно: https://javarush.ru/groups/posts/1919-schitihvanie-s-klaviaturih--riderih
Николай6 уровень, Днепр
26 декабря 2018, 01:05
Народ, а почему именно такой код: " int nAge = Integer.parseInt(sAge); ", а именно что значит буковка n в int nAge??То что это преобразование строки в число я понял. Спасибо!!
Vitaliy Kang4 уровень
26 декабря 2018, 13:57
В переменной 'nAge' под буквой 'n' скорее всего скрывается английское слово numeric - цифровой. А в 'sAge', 's' - String. Начальные буквы 'n' и 's' в данном случае добавленны автором кода для простоты. Ведь так их куда проще будет отличить в дальнейшем, чем пресловутые 'age1' и 'age2', к примеру.
Андрей24 уровень, Одесса
13 декабря 2018, 12:22
Использовать Scanner довольно удобно, но от этого не очень много пользы Могли бы вы привести доводы в пользу BufferedReader? То что Я прочитал в интернете говорит как раз о противоположном....
Ponin.F8 уровень, Санкт-Петербург
25 декабря 2018, 20:04
Оба читают в буфер и размер буфера у BufferedReader больше (8192 против 1024). Если нужно просто что-то считать, без синтаксического анализа то предпочтительнее BufferedReader, ну и еще он чаще быстрее...
Anatoly9 уровень, Новосибирск
11 января, 06:16
Дойдешь до лекции про потоки поймешь почему от Scanner не очень много пользы
valijon li8 уровень, Москва
13 декабря 2018, 00:07
7 вниз голосование Ниже приведены различия между BufferedReader и сканер 1)BufferedReader считывает только данные, но сканер также анализирует данные. 2)вы можете читать только строки с помощью BufferedReader, но вы можете читать int, длиной или поплавок используя блок развертки. 3)BufferedReader старше от сканера, он существует от jdk 1.1 в то время как Сканер был добавлен в выпуск JDK 5. 4)Размер буфера BufferedReader большой (8KB) по сравнению с 1KB сканера. 5)BufferedReader больше подходит для чтения файла с длинной строкой пока блок развертки более соответствующ для читать малый входной сигнал потребителя от командная строка. 6)BufferedReader синхронизируется, но сканер не, что означает, что вы не удается разделить сканер между несколькими потоками. 7)BufferedReader быстрее, чем сканер, потому что он не тратит время при разборе 8)BufferedReader немного быстрее по сравнению со сканером 9)BufferedReader от java.пакет ввода-вывода и сканер с java.util пакет на основе очков мы можем выбрать наш выбор. Спасибо