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

Открыта

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

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

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

Комментарии (514)
  • популярные
  • новые
  • старые
Для того, чтобы оставить комментарий вы должны авторизоваться
Vadyre_ 4 уровень
19 ноября, 14:22
Для меня эта тема самая сложная - уже лекции раз 5 прочила(разных ). Просто в лекциях которые вы пишите очень сложные коды я еще много не знаю .
Oleg Zavrazhin 5 уровень
10 ноября, 19:18
такое чувство, что строка
Reader inputStreamReader = new InputStreamReader(inputStream);
должна быть
InputStreamReader inputStreamReader = new InputStreamReader(inputStream);
По крайней мере IDE не знает, что такое Reader.
mrWalter 4 уровень, Казань
12 ноября, 23:49
так ты Reader импортируй,тк он не лежит в дефолтном пакете lang
Сергей 7 уровень, Москва
28 октября, 13:32
Можно на пальцах объяснить, чем Scanner хуже BufferedReader ? Вот отличная статья про Scanner: https://javarush.ru/groups/posts/klass-scanner Пока мне поначалу гораздо удобнее использовать Scanner, потому что он действительно простой и удобный, в отличие от громоздкого BufferedReader
Игорь 15 уровень, Братск
15 ноября, 11:04
Никого Scanner не будет, когда ты будешь изучать потоки, я в своё время выбрал BufferedReader, Scanner пригодится при запросе с консоли чего-то, он удобнее. Но потом от BufferedReader и InputStreamReader, появится много разных модификаций для работы с потоками, к примеру в файл сохранить объект или из файла считать информацию. Да и я пришёл сюда не просто так, сейчас задачи на потоки делаю, вспоминаю кое-что))
Tirex Работает в
27 октября, 22:52
Читая комменты, вопрос ночной родился: "Как так получается, что одни и те же задачи решают люди разных уровней прохождения квестов? Походу, что у человека 3-й,что 4-й, что 6-й и т.д. уровни, все равно одинаково не понятно как решать. Как так-то?
Вадим 5 уровень, Краснодар
4 ноября, 14:07
Полагаю, кто-то насобирал материи - читает курс лекций максимально далеко, а потом возвращается решать задачи.
Mikhail Bryukhin Boy next door в Deep Dark Dungeon
5 ноября, 13:42
Да просто показывается текущий уровень комментатора. Кто-то напишет коммент на 2 уровне, а потом дойдёт до 4, и будет показываться в комментариях, что у него четвертый уровень.
Сергей Павлов 8 уровень, Минск
27 октября, 14:57
тяжела и неказиста, жизнь салаги програмиста
Алина бухгалтер в аутсорсинговая компа
19 октября, 12:23
Считывание с клавиатуры Вот тут на Джаве Раш материал в статье норм изложен
Inessa Программист 1С в Москоу))
28 октября, 13:53
Спасибо))
Askar Bisenbayev 6 уровень
17 октября, 09:47
Объясните пожалуйста. Какой еще ввод данных? Мы ведь и так пишем коды с клавиатуры и они вводятся в коды и выводятся при помощи нами же введенными кодами(данными) на экран! Что я не догнал?
Владоs 4 уровень, Луганск
17 октября, 15:01
по сути мы все это время указывали, что выводить нашей программе, а теперь чтобы вывести какое-то слово, нужно будет еще ввести что-то с клавиатуры пользователю. например, в System.out.println мы написали "И тебе привет", и чтобы это вывелось на экран, нужно будет самому написать "Привет" в этом System.in. программа получит эти данные, и если все совпадет – выведет нам "И тебе привет" в ответ. поправьте, если я ошибаюсь, пожалуйста
Кирилл 17 уровень, Москва
17 октября, 15:33
Допустим ты пишешь калькулятор и хочешь умножить число x на z,у тебя есть такой код
public static double multiple(double x,double y) {
        return x*1.0 * y;
    }
Чтобы задать значение числу x и y ты можешь либо вписать эти значения прямо в код:
double x =5;
    double y= 6;
Но тогда,если ты захочешь поменять числа - тебе придется переписывать код и перекомпилировать программу каждый раз после изменения значений.Вместо этого можно создать инструмент(BufferedReader) и считывать значения для этих переменных,вводя значения в консоль,прямо во время работы программы!
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
       double x = Double.parseDouble(reader.readLine());
       double y = Double.parseDouble(reader.readLine());
Кирилл 17 уровень, Москва
17 октября, 15:42
https://javarush.ru/groups/posts/1919-schitihvanie-s-klaviaturih--riderih советую прочитать
Лёша 4 уровень, Москва
15 октября, 09:13
Опять мозг болит, ничего не понятно.
Алина бухгалтер в аутсорсинговая компа
19 октября, 12:24
лучше вот тут статью почитай на Джаве https://javarush.ru/groups/posts/1919-schitihvanie-s-klaviaturih--riderih
Тони 9 уровень, Москва
10 октября, 11:50
Можете объяснить что такое System.in., а точнее для чего оно, собственно, нужно? Как я понимаю вводить можно не только с клавиатуры но и, например брать ссылку с интернета, либо какой-нибудь файл и "вводить" её в этот код/программу, а потом BufferedReader reader = new BufferedReader(new InputStreamReader(System.in)); обрабатывает её? Я правильно понял, объясните пожалуйста..
Кирилл 17 уровень, Москва
17 октября, 15:40
System.in - поток данных из которых reader получает значения.Можно читать значения из файла(это будет примерно на 14 лвле):
public static void main(String[] args) throws FileNotFoundException {
        File file = new File("C:\\Program Files (x86)\\Steam\\example.txt");
        BufferedReader reader = new BufferedReader(new FileReader(file));
    }
Asankheya 4 уровень
3 октября, 20:24
хоть что-то знакомое со stepika. там этот Scanner scanner = new Scanner() был на каждом углу.