Вы находитесь на странице: 1из 31

1

Java Foundations
3-5
Ввод данных с клавиатуры

© 2020, Корпорация Oracle и аффилированные с ней лица. Все права защищены.

2
Цели
• В данном уроке рассматриваются следующие темы:
−Основные сведения о вводе данных пользователем
−Создание JOptionPane для сбора вводимых
пользователем данных
−Использование Scanner для сбора вводимых
данных с консоли
−Использование Scanner для сбора вводимых
данных из файла
−Основные сведения об
обработке маркеров и
разделителей с помощью Scanner

JFo 3-5
Ввод данных с клавиатуры © 2020, Корпорация Oracle и аффилированные с ней лица. Все права защищены. 3

3
Темы
• Ввод пользователя
• JOptionPane
• Scanner

Взаимная Ввод
Общие Типы Типы данных с
конвертация
сведения о числовы текстовы клавиату
типов
переменных х данных х данных ры
данных

JFo 3-5
Ввод данных с клавиатуры © 2020, Корпорация Oracle и аффилированные с ней лица. Все права защищены. 4

44
Зачем нужно получать данные, введенные
пользователем?
• Когда вы вручную присваиваете значения
переменным, эти значения называются
жестко закодированными:
String input = "Это строка";

• Жестко закодированные значения легко изменить,


если у вас есть исходный код и NetBeans:
String input = "Это другая строка";
−Но когда ваша программа будет доставлена
пользователям, у них не будет такой возможности

JFo 3-5
Ввод данных с клавиатуры © 2020, Корпорация Oracle и аффилированные с ней лица. Все права защищены. 5

5
Типы данных, вводимых пользователями
• Примеры данных, вводимых пользователями,
включают следующее …
−Нажатие кнопки на игровом контроллере
−Ввод адреса в GPS
−Ввод чисел и функций на калькуляторе
−Указание своего имени
• Но если бы пользователь не вводил данные …
−В какой момент персонаж вашей игры должен был бы
подпрыгивать?
−Куда вас привел бы GPS?
−Какие расчеты сделал бы калькулятор?
−Как бы вас называли другие люди?

JFo 3-5
Ввод данных с клавиатуры © 2020, Корпорация Oracle и аффилированные с ней лица. Все права защищены. 6

6
Получение данных, введенных пользователем
• Существует множество способов получить данные,
введенные пользователем:
−Кнопки (физические или виртуальные)
−Колесики и клавиши
−Голосовые команды
−Диалоговые окна для ввода текста
−Файлы свойств
• Java предоставляет множество способов получения
данных пользователей, включая следующие …
−Swing JOptionPane
−JavaFX (последователь Swing, рассматривается далее)
−Scanner

JFo 3-5
Ввод данных с клавиатуры © 2020, Корпорация Oracle и аффилированные с ней лица. Все права защищены. 7

7
Темы
• Ввод пользователя
• JOptionPane
• Scanner

Взаимная Ввод
Общие Типы Типы данных с
конвертация
сведения о числовы текстовы клавиату
типов
переменных х данных х данных ры
данных

JFo 3-5
Ввод данных с клавиатуры © 2020, Корпорация Oracle и аффилированные с ней лица. Все права защищены. 8

88
JOptionPane
• Это простой способ получить данные от
пользователей:
JOptionPane.showInputDialog("Введите текст:");

Ввод

Введите текст:

JFo 3-5
Ввод данных с клавиатуры © 2020, Корпорация Oracle и аффилированные с ней лица. Все права защищены. 9

9
JOptionPane возвращает строки
• Введенные данные можно хранить в виде строки:

String input = JOptionPane.showInputDialog("Введите текст:");

Ввод

Введите текст:
Это строка|

• Это равнозначно следующему коду:


String input = "Введите текст";

JFo 3-5
Ввод данных с клавиатуры © 2020, Корпорация Oracle и аффилированные с ней лица. Все права защищены. 10

10
Упражнение 1, Часть 1
• Импортируйте и откройте проект Input01
• Создайте JOptionPane:
−В NetBeans отобразится предупреждение
−Следуя рекомендации NetBeans, импортируйте
javax.swing.JOptionPane
−Об импорте мы расскажем в другом разделе

JFo 3-5
Ввод данных с клавиатуры © 2020, Корпорация Oracle и аффилированные с ней лица. Все права защищены. 11

11
Упражнение 1, Часть 2
• Сохраните введенные данные как объект String
• Выведите переменную String
• Выполните синтаксический анализ String как
отдельной переменной int
−Потребуется ввести значение, доступное для
синтаксического анализа
−Выведите значение +1
• Попробуйте создать диалоговое окно,
проанализировать его и инициализировать int в
одной строке
• Используйте только одну точку с запятой (;)
JFo 3-5
Ввод данных с клавиатуры © 2020, Корпорация Oracle и аффилированные с ней лица. Все права защищены. 12

12
Сжатый код
• Входные данные, синтаксический анализ и вычисления
можно распределить по нескольким строкам:
String inputString = JOptionPane.showInputDialog("??");
int input = Integer.parseInt(inputString);
input++;

• Также можно сжать все это в одну строку:


int input = Integer.parseInt(JOptionPane.showInputDialog("??")) +1;

• Это зависит от личных предпочтений


− Но если в дальнейшем вы планируете ссылаться на
определенные значения, будет удобно сохранить эти значения
в переменной

JFo 3-5
Ввод данных с клавиатуры © 2020, Корпорация Oracle и аффилированные с ней лица. Все права защищены. 13

13
Различные диалоги ввода
• Мы создали простую переменную InputDialog:
Ввод

Введите текст:

• В более сложном коде


можно придать переменной
InputDialog дополнительные
свойства: Заголовок диалогового окна

Это вопрос?
Введите здесь текст.

JFo 3-5
Ввод данных с клавиатуры © 2020, Корпорация Oracle и аффилированные с ней лица. Все права защищены. 14

14
Дополнительные возможности InputDialog
• Эта версия InputDialog не возвращает объект String
• Чтобы использовать Заголовок диалогового окна

полученные данные, их Это вопрос?


Введите здесь текст.
необходимо преобразовать
в объект String:

String input = (String)JOptionPane.showInputDialog(null,


"Это вопрос?",
"Заголовок диалогового окна",
2,
null,
null,
"Введите текст.");

JFo 3-5
Ввод данных с клавиатуры © 2020, Корпорация Oracle и аффилированные с ней лица. Все права защищены. 15

Не совсем понятный код? Не волнуйтесь. Даже у опытных программистов могут возникать


затруднения при работе с новым кодом. Отличный способ усовершенствовать свои
знания — изменить существующий код и посмотреть, что произойдет. Мы сделаем это в
следующем упражнении.

15
Дополнительные возможности InputDialog
• Во избежание ввода нежелательных данных можно
сделать так, чтобы Заголовок диалогового окна

Это вопрос?
пользователи могли Выбор 2
вводить только допустимые
данные
−Некоторые элементы этого синтаксиса подробно
рассматриваются в Разделе 8
String[] acceptableValues = {"Выбор 1", "Выбор 2", "Выбор 3"};
Input2 string= (String)JOptionPane.showInputDialog(null,
"Это вопрос?", "Заголовок диалогового окна",
2, null,
acceptableValues,
acceptableValues[1]);

JFo 3-5
Ввод данных с клавиатуры © 2020, Корпорация Oracle и аффилированные с ней лица. Все права защищены. 16

16
showMessageDialog
• Элемент showMessageDialog не предоставляет поля
для ввода данных Заголовок

• Существует много других Здесь не предусмотрен ввод данных,


просто отображается сообщение
вариантов JOptionPane

JOptionPane.showMessageDialog(
null,
"Здесь не предусмотрен ввод данных, просто
отображается сообщение",
"Заголовок",
0);

JFo 3-5
Ввод данных с клавиатуры © 2020, Корпорация Oracle и аффилированные с ней лица. Все права защищены. 17

17
Упражнение 2
• Импортируйте и откройте проект Input02
• Поэкспериментируйте с кодом и попробуйте
изменить следующее …
−Заголовок сообщения
−Сообщение
−Любой введенный текст по умолчанию
−Значок диалогового окна
• Анализируйте, выполняйте операции и выводите
входные данные

JFo 3-5
Ввод данных с клавиатуры © 2020, Корпорация Oracle и аффилированные с ней лица. Все права защищены. 18

Подсказка. Игнорируйте неопределенные значения (null). Если вам требуется помощь,


воспользуйтесь документацией Java:
http://docs.oracle.com/javase/8/docs/api/javax/swing/JOptionPane.html.

18
Темы
• Ввод пользователя
• JOptionPane
• Scanner

Взаимная Ввод
Общие Типы Типы данных с
конвертация
сведения о числовы текстовы клавиату
типов
переменных х данных х данных ры
данных

JFo 3-5
Ввод данных с клавиатуры © 2020, Корпорация Oracle и аффилированные с ней лица. Все права защищены. 19

1919
Получение входных данных с помощью объекта
Scanner
• Объект Scanner открывает поток для сбора входных
данных:
−System.in готовит Scanner к сбору входных данных из
консоли
−Введите данные в окне результатов NetBeans
−Scanner также можно использовать без IDE
• Рекомендуется закрыть поток Scanner после
завершения сбора
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);

sc.close();
}//конец метода main

JFo 3-5
Ввод данных с клавиатуры © 2020, Корпорация Oracle и аффилированные с ней лица. Все права защищены. 20

20
Считывание входных данных с помощью объекта
Scanner
• Scanner ищет маркеры
• Маркеры отделяются друг от друга разделителями
−По умолчанию в качестве разделителя используется
пробел

JFo 3-5
Ввод данных с клавиатуры © 2020, Корпорация Oracle и аффилированные с ней лица. Все права защищены. 21

21
Класс Scanner
• Как и другие классы, Scanner включает в себя поля и
методы
• Вот несколько полезных методов Scanner …
−nextInt() считывает маркер как int
−nextDouble() считывает следующий маркер как double
−next() считывает следующий маркер как String
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int x = sc.nextInt();
double y = sc.nextDouble();
String z = sc.next();
sc.close();
}//конец метода main

JFo 3-5
Ввод данных с клавиатуры © 2020, Корпорация Oracle и аффилированные с ней лица. Все права защищены. 22

22
Упражнение 3
• Импортируйте и откройте проект Input03
• Создайте класс Scanner:
− В NetBeans отобразится предупреждение
− Следуя рекомендации NetBeans, импортируйте java.util.Scanner
− Не забудьте закрыть Scanner
• С помощью класса Scanner и System.in напишите
программу, которая будет выполнять следующие
задачи …
− Вычислять и выводить сумму трех целых чисел, введенных
пользователем
• Попытайтесь использовать менее трех маркеров
• Попытайтесь использовать маркер, который нельзя
проанализировать как int

JFo 3-5
Ввод данных с клавиатуры © 2020, Корпорация Oracle и аффилированные с ней лица. Все права защищены. 23

23
Исключения: InputMismatchException

• Это исключение возникает, когда входные данные


нельзя проанализировать как ожидаемый тип:
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println(sc.nextInt());
sc.close();
}//конец метода main

JFo 3-5
Ввод данных с клавиатуры © 2020, Корпорация Oracle и аффилированные с ней лица. Все права защищены. 24

24
Исключения: IllegalStateException

• Это исключение возникает при попытке получить


доступ к потоку после его закрытия:
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
sc.close();
System.out.println(sc.nextInt());
} //конец метода main

JFo 3-5
Ввод данных с клавиатуры © 2020, Корпорация Oracle и аффилированные с ней лица. Все права защищены. 25

25
Исключения: NullPointerException

• Это исключение возникает, потому что "fakeFile.txt"


не существует еще одна распространенная
ошибка — отсутствие расширения .txt
public static void main(String[] args) {
Scanner sc = new Scanner(
Input04.class.getResourceAsStream("fakeFile.txt"));
sc.close();
} //конец метода main

JFo 3-5
Ввод данных с клавиатуры © 2020, Корпорация Oracle и аффилированные с ней лица. Все права защищены. 26

26
Чтение данных из файла
• Java предлагает несколько способов чтения файлов
• Вот самые полезные методы Scanner:
− nextLine() расширяет объект Scanner за пределы текущей
строки и возвращает входные данные, которые были
пропущены
− findInLine("StringToFind") пытается найти следующее вхождение
шаблона, созданного на основе указанного объекта String, без
учета разделителей
public static void main(String[] args) {
Scanner sc = new Scanner(
Input04.class.getResourceAsStream("fakeFile.txt"));
int x = sc.nextInt();
String entireLine = sc.nextLine();
sc.close();
} //конец метода main

JFo 3-5
Ввод данных с клавиатуры © 2020, Корпорация Oracle и аффилированные с ней лица. Все права защищены. 27

27
Упражнение 4, Часть 1
• Импортируйте и откройте проект Input04
• Выполните код и изучите результат
• Пролистайте все строки, пока не дойдете до
"BlueBumper"
• Два числовых значения после "BlueBumper" — это
объекты xPositon и yPosition
• Сохраните эти координаты как значения integer и
выведите их
• При необходимости изучите файл input04text.txt

JFo 3-5
Ввод данных с клавиатуры © 2020, Корпорация Oracle и аффилированные с ней лица. Все права защищены. 28

28
Упражнение 4, Часть 2
• Если вам интересно, изучите файл Level05.txt:
−В этом файле хранятся данные уровней игры
Java Puzzle Ball
−Операции чтения и анализа данных уровней немного
сложнее, чем в этом упражнении
−Но если вы выполнили это упражнение, вы приблизились
к пониманию того, как это происходит

JFo 3-5
Ввод данных с клавиатуры © 2020, Корпорация Oracle и аффилированные с ней лица. Все права защищены. 29

29
Сводка
• В этом уроке вы узнали следующее:
−Основные сведения о вводе данных пользователем
−Создание JOptionPane для сбора вводимых
пользователем данных
−Использование Scanner для сбора вводимых данных с
консоли
−Использование Scanner для сбора
вводимых данных из файла
−Основные сведения об
обработке маркеров и
разделителей с помощью
Scanner

JFo 3-5
Ввод данных с клавиатуры © 2020, Корпорация Oracle и аффилированные с ней лица. Все права защищены. 30

30
31