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

Открыта

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

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

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

Комментарии (230)
  • популярные
  • новые
  • старые
Для того, чтобы оставить комментарий вы должны авторизоваться
Alexander Kozlov3 уровень
3 часа назад
Господи, мои глаза о_О Просто для аналогии: В то время как вот это пишется на java: BufferedReader reader = new BufferedReader(new InputStreamReader(System.in)); String name = reader.readLine(); System.out.println (...) Аналогичное пишется на Javascript: let a = prompt ("..."); alert (a);
Илья Обожин5 уровень
10 часов назад
Да, но как ввести не символ, а число?
Сергей6 уровень, Нижний Новгород
9 июня, 08:26
Ребята, объясню на пальцах: в Java есть класс типа BufferedReader, мы создаем экземпляр класса reader, указывая в конструкторе метода в свою очередь новый экземпляр класса InputStreamReader, который будет принимать данные с клавиатуры. У этого класса есть метод readLine, вызывая который, мы записываем в переменные те значения, который пользователь вводит с клавиатуры. В IntellJ IDEA эти данные вводятся в консольном окне (надо фокус курсора туда перевести)
Кирилл5 уровень, Москва
2 июня, 11:01
Подскажите пожалуйста по этой строке: InputStream inputStream = System.in; нашёл инфо, что переменная in "описана" (смысл слова "описана" не понятен) в классе System, но принадлежит классу InputStream. Разъясните, что значит слово "описана" в данном выражении и что переменная из одного класса делает в другом.
Роман4 уровень
4 июня, 08:59
Почитай о наследовании классов
KirHolzer4 уровень, Shanghai
26 мая, 04:55
HELP !HELP! HELP! Ребята, кому не сложно, объясните прям детально эту строку: int nAge = Integer.parseInt(sAge); //преобразовываем строку в число откуда и что такое - nAge?вроде имя переменной... откуда и что такое - Integer.parseInt(sAge)? и почему именно int и Integer? ... все остальное вроде понятно
Wladyslaw8 уровень
26 мая, 13:41
nAge - переменная, которую ты объявляешь с левой стороны и инициализируешь значением с правой. Integer.parseInt(sAge). parseInt() - статический метод класса Integer - который в свою очередь является классом-оберткой для примитивного типа int. Метод приводит значение переменной типа String sAge в значение типа int и ним инициализирует переменную типа int nAge
Хорс6 уровень, Харьков
26 мая, 23:13
у тебя цифра может храниться в виде текста: String ageS = "20"; //в данном случае Java расценивает эту 20 как текст, а не как число (не может умножать, делить....) если ты хочешь чтоб Java превратила эту строку в реальное число - то парсишь текст: int ageN = Integer.parseInt(ageS); можешь поэкпериментировать, например так: int ageN = Integer.parseInt("99") + 1; // и выведи на экран значение переменной int ageN = Integer.parseInt("abc99"); // получишь ошибку, почитай о ней
MartyMcAir10 уровень
25 мая, 17:02
WoW _ 0_o на 3м уровне произошел, молниеносный резкий вброс инфы об потоках входящих, исходящих и их буферизации... Страшно даже подумать, что будет на следующих.., ээм сколько там уровней осталось.. (Кстати, классное у вас оформление кода, т.е. его расцветка.. В лекциях. Хорошо читабельна.)
Alexey8 уровень, Санкт-Петербург
20 мая, 18:41
"Пример 3 Еще более компактная" Зачем так объяснять? Можно же было написать профессиональным языком: класс Scanner отличается от классов BufferedReader и InputStreamReader и находятся они в разных пакетах. Просто у класса Scanner есть балдежный метод nextLine() и его использовать проще. Класс этот находится в пакете java.util, который нужно импортировать: import java.util.Scanner; При создании объекта типа Scanner срабатывает конструктор его класса, который требует передать в него объект типа InputStream, т.е. System.in. Читайте официальную доку господа и скоро начнете все понимать.
Denis4 уровень
15 мая, 13:21
тот случай когда вспомнил Python и заплакал :o)) user_input = input() :o))
Roman Roumanian5 уровень
3 июня, 12:09
10 REM Мой калькулятор 20 INPUT A 30 INPUT B 40 PRINT A + B ;)
Olka7 уровень
29 апреля, 19:55
пока ничего не понятно=) вопросов много)
Olena Falko4 уровень, Харьков
25 апреля, 12:11
про эти методы сканера будут дальше говорить? next (); nextDouble ();