В Java существует удобный способ считывания данных с клавиатуры, который основан на классе Scanner. Этот класс предоставляет методы для ввода разных типов данных с клавиатуры. Что такое классы и методы – разберём не в этот раз. Пока просто примите их как данность – обёртку для операций. Эти понятия необходимо разбирать впоследствии и отдельно.
Содержание:
Класс Scanner
Необходимый нам класс Scanner лежит в пакете, который для использования в нашей программе нужно импортировать (сослаться на него в файле с кодом). Давайте это сделаем, это делается одной строчкой:
1 |
import java.util.Scanner; |
Готово! Теперь можно использовать класс Scanner.
Для того, чтобы считывать данные с клавиатуры, нам понадобится объявить переменную типа Scanner и создать новый объект класса Scanner.
1 |
Scanner scanner = new Scanner(System.in); |
В этой строке с помощью ключевого слова new был создан объект класса Scanner. Ему мы передали поток ввода (System.in), чтобы читать данные именно с клавиатуры. Пока что можете не заморачиваться, что в теории означают все эти классы, объекты, методы и так далее, поскольку это темы более поздние. Пока что посмотрите, как это использовать.
У класса Scanner есть методы (то, что он умеет делать) для считывания данных разных типов. Например:
- next() – считывает следующее слово (до пробела или конца строки);
- nextLine() – считывает всю строку (до символа перевода строки, то есть нажатия клавиши Enter);
- nextByte() – следующее значение типа byte;
- nextShort() – следующее значение типа short;
- nextInt() – int;
- nextLong() – long;
- nextChar() – char;
- nextBoolean() – boolean;
- nextFloat() – float;
- nextDouble() – double.
Следующий код продемонстрирует мастерский опрос пользователя.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
import java.util.Scanner; public class FirstProject { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); System.out.println("Добро пожаловать в регистрацию художников на выставку!"); System.out.println("------------------------------------------------------"); System.out.print("Введите ваш творческий псевдоним -> "); String pseudonym = scanner.nextLine(); System.out.print("Ваш возраст -> "); int age = scanner.nextInt(); System.out.print("Количество картин -> "); int pictureCount = scanner.nextInt(); System.out.print("Сколько вы хотите заработать в ходе этой выставки? -> $"); double dollars = scanner.nextDouble(); System.out.println("Информация принята!"); System.out.println("-------------------"); System.out.println(); double dollarsPerPicture = dollars / pictureCount; System.out.print(pseudonym + ", вы успешно зарегистрировались на выставку "); System.out.println("в ваши " + age + " лет."); System.out.println("Вы ожидаете в среднем за картину заработать $" + dollarsPerPicture); System.out.println("Творческих успехов!"); } } |
Благодаря объекту Scanner всё отображаемое здесь в консоли зелёным цветом – это мой личный ввод с клавиатуры. Таким образом, Java-программа позволила ввести данные, задав уточняющие вопросы, обработала их и вывела сообщение на экран. Если бы программа была более продвинутая, она могла бы не только бросать слова на ветер. Программа также могла бы сохранять данные о художнике в файл или даже в базу данных. Но пока ограничимся “Сказал – не сделал”.
Если на ожидаемый ввод целого числа (scanner.nextInt()) ввести вещественное число, или чего ещё хуже, строку – ошибка (исключение) не заставит себя ждать. Поэтому не будем так рисковать. Но обычно возможность таких казусов следует обрабатывать в программе.
Вычисления над введёнными данными
Благодаря наличию в Java самых разных пакетов и библиотек, мы можем многие функции (методы и классы) не писать сами – а использовать уже имеющиеся. К примеру, в Java есть класс Math, позволяющий проводить математические вычисления наподобие возведения в степень, взятия синуса, арксинуса, округления, генерации случайных чисел и так далее. Также у строк (типа String) есть много интересных методов. Давайте воспользуемся ими и усовершенствуем регистрацию на конкурс художников.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 |
import java.util.Scanner; public class FirstProject { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); System.out.println("Добро пожаловать в регистрацию художников на выставку!"); System.out.println("------------------------------------------------------"); System.out.print("Введите ваш творческий псевдоним -> "); String pseudonym = scanner.nextLine(); pseudonym = pseudonym.toUpperCase(); System.out.print("Ваш возраст -> "); int age = scanner.nextInt(); System.out.print("В каком возрасте вы начали рисовать? -> "); int ageStartedPainting = scanner.nextInt(); System.out.print("Сколько вы нарисовали за жизнь картин? -> "); int picturesDrawn = scanner.nextInt(); System.out.print("Количество картин, которые вы хотите нарисовать для выставки -> "); int pictureCount = scanner.nextInt(); System.out.print("Сколько вы хотите заработать в ходе этой выставки? -> $"); double dollars = scanner.nextDouble(); System.out.println("Информация принята!"); System.out.println("-------------------"); System.out.println(); double dollarsPerPicture = Math.round(dollars / pictureCount); int agesPainting = age - ageStartedPainting; double picturesPerYear = picturesDrawn * 1.0 / agesPainting; double picturesToDrawInExhibition = Math.min(pictureCount, picturesPerYear); System.out.print(pseudonym + ", вы успешно зарегистрировались на выставку "); System.out.println("в ваши " + age + " лет."); System.out.println("Вы хотите нарисовать в выставке " + pictureCount + " картин."); System.out.println("В среднем за год вы рисуете " + picturesPerYear + " картин."); System.out.println("Рекомендация: на выставку лучше выставлять не более " + picturesToDrawInExhibition + " картин."); System.out.println("Вы ожидаете в среднем за картину заработать $" + dollarsPerPicture); System.out.println("Творческих успехов!"); } } |
Итого были добавлены перевод в верхний регистр псевдонима (pseudonym.toUpperCase()), округление (Math.round()), выбор наименьшего из двух чисел (Math.min()). Но это только минимум возможностей этих инструментов. А инструментов ещё много разных. Так что не стесняйтесь, пробуйте, используйте, наслаждайтесь! Если вам нужен функционал, который уже кто-то реализовал, то зачем писать это самому?
Теперь у вас есть базовое представление о чтении ввода с клавиатуры с использованием класса Scanner. Кроме того, мы рассмотрели, как использовать некоторые методы встроенных пакетов. Не стесняйтесь экспериментировать с разными типами данных и операциями над ними.
Уведомление: Как делать запросы к API на Java с ПК