1. Зчитування з консолі, System.in
У попередніх лекціях ми познайомилися з командами виведення на екран. Для цього ми використовували обʼєкт System.out та його методи print() і println(). Це просто й зручно.
Але як ви вже, ймовірно, здогадуєтеся, одного виведення на екран недостатньо. Мета більшості програм — зробити щось корисне для користувача. Тому часто потрібно, щоб користувач міг вводити дані з клавіатури.
Як і для виведення, для введення даних теж є спеціальний обʼєкт — System.in. Але, на жаль, він не такий зручний, як хотілося б. Цей обʼєкт дає змогу зчитувати дані з клавіатури, але лише по одному символу за раз.
Тому ми скористаємося ще одним класом, який у парі з обʼєктом System.in забезпечить усе необхідне. У Java вже давно є класи на всі випадки життя. Із одним із них ми зараз познайомимося.
2. Клас Scanner
Клас Scanner (повне імʼя java.util.Scanner) уміє зчитувати дані із різних джерел: консоль, файли, інтернет. Якщо ми хочемо, щоб він зчитував дані з клавіатури, потрібно передати йому обʼєкт System.in як параметр — джерело даних. А обʼєкт типу Scanner сам розбереться, що з ним робити.
Зчитування з клавіатури за допомогою обʼєкта типу Scanner виглядатиме приблизно так:
| Код | Пояснення |
|---|---|
|
Створюємо обʼєкт класу Scanner. Зчитуємо з клавіатури рядок тексту. Зчитуємо ціле число з клавіатури. |
Виглядає не надто складно, але чи все насправді так просто?
Можливо, у вас виникло багато запитань — зараз на них відповімо.
Спершу покажемо приклад повної програми, у якій використовується клас Scanner:
void main()
{
Scanner console = new Scanner(System.in);
String name = console.nextLine();
int age = console.nextInt();
System.out.println("Імʼя: " + name);
System.out.println("Вік: " + age);
}
3. Створення обʼєкта Scanner
Перше запитання — що це за рядок Scanner console = new Scanner(System.in);?
Такий рядок може збивати з пантелику, однак ви постійно зустрічатимете схожі конструкції. Тож час пояснити, що тут написано.
Згадаймо, як ми зазвичай створюємо змінну з текстом:
String str = "текст";
Спочатку ми пишемо тип змінної (String), потім її імʼя (str) і, нарешті, після знака рівності вказуємо значення.
У нашому «дивному» рядку насправді все те саме:
Scanner console = new Scanner(System.in);
Усе, що стоїть ліворуч від знака рівності, — це оголошення змінної типу Scanner на імʼя console. Її можна було назвати, наприклад, s, scanner або keyboard. Тоді код виглядав би так:
Scanner s = new Scanner(System.in);
String name = s.nextLine();
int age = s.nextInt();
Scanner scanner = new Scanner(System.in);
String name = scanner.nextLine();
int age = scanner.nextInt();
Scanner keyboard = new Scanner(System.in);
String name = keyboard.nextLine();
int age = keyboard.nextInt();
Гадаю, тепер усе значно зрозуміліше.
А код, що стоїть праворуч від знака рівності, трохи складніший. Йдеться про new Scanner(System.in); Але й тут нічого космічного.
У цьому коді ми говоримо Java-машині: створи новий обʼєкт (слово new) типу Scanner і передай йому як параметр джерело даних — обʼєкт System.in, звідки новостворений обʼєкт Scanner братиме дані.
Після виконання цього рядка у нас зʼявиться змінна на імʼя console типу Scanner, за допомогою якої програма зможе зчитувати дані з клавіатури.
4. Виклик методів
У наведеному вище прикладі змінна console типу Scanner зберігала посилання на обʼєкт типу Scanner.
Щоб викликати методи обʼєкта, на який посилається змінна, потрібно після імені змінної написати крапку, а потім — імʼя методу і параметри. Загальний вигляд цієї команди такий:
змінна.метод(параметри);
Приклади:
System.out.println("Привіт");
System.out.println(1);
Якщо ви не плануєте передавати методу параметри, просто пишіть порожні дужки:
змінна.метод();
Приклад:
System.out.println();
5. Введення даних із консолі
Коли у вас є обʼєкт типу Scanner, вводити дані з клавіатури дуже просто.
Щоб зчитати з клавіатури рядок, потрібна команда:
String str = console.nextLine();
Коли програма дійде до виконання цього рядка, вона призупиниться і чекатиме, поки користувач введе дані та натисне клавішу Enter. Після цього усе, що користувач введе, буде збережено у змінну str.
Щоб зчитати з клавіатури число, потрібна команда:
int number = console.nextInt();
Усе аналогічно до попередньої команди. Коли програма дійде до виконання цього рядка, вона призупиниться і чекатиме, поки користувач введе дані та натисне клавішу Enter. Після цього введені дані буде перетворено на ціле число й збережено у змінну number.
Якщо користувач введе дані, які неможливо перетворити на ціле число, станеться помилка, і програма завершиться.
Щоб зчитати з клавіатури дробове число, потрібна команда:
double number = console.nextDouble();
Ця команда повністю аналогічна методу nextInt(), але вона перевіряє, що введені дані можна перетворити на число типу double.
Приклад програми, яка зчитує з клавіатури два числа й виводить їхню суму:
void main()
{
Scanner console = new Scanner(System.in);
int a = console.nextInt();
int b = console.nextInt();
System.out.println(a + b);
}
Примітка
Користувач може ввести кілька чисел в одному рядку, розділивши їх пробілами — така ситуація буде коректно оброблена методами класу Scanner. Втім, числа будуть зчитані програмою лише після того, як користувач натисне Enter.
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ