JavaRush /Курси /JAVA 25 SELF /Введення з клавіатури

Введення з клавіатури

JAVA 25 SELF
Рівень 2 , Лекція 5
Відкрита

1. Зчитування з консолі, System.in

У попередніх лекціях ми познайомилися з командами виведення на екран. Для цього ми використовували обʼєкт System.out та його методи print() і println(). Це просто й зручно.

Але як ви вже, ймовірно, здогадуєтеся, одного виведення на екран недостатньо. Мета більшості програм — зробити щось корисне для користувача. Тому часто потрібно, щоб користувач міг вводити дані з клавіатури.

Як і для виведення, для введення даних теж є спеціальний обʼєкт — System.in. Але, на жаль, він не такий зручний, як хотілося б. Цей обʼєкт дає змогу зчитувати дані з клавіатури, але лише по одному символу за раз.

Тому ми скористаємося ще одним класом, який у парі з обʼєктом System.in забезпечить усе необхідне. У Java вже давно є класи на всі випадки життя. Із одним із них ми зараз познайомимося.

2. Клас Scanner

Клас Scanner (повне імʼя java.util.Scanner) уміє зчитувати дані із різних джерел: консоль, файли, інтернет. Якщо ми хочемо, щоб він зчитував дані з клавіатури, потрібно передати йому обʼєкт System.in як параметр — джерело даних. А обʼєкт типу Scanner сам розбереться, що з ним робити.

Зчитування з клавіатури за допомогою обʼєкта типу Scanner виглядатиме приблизно так:

Код Пояснення
Scanner console = new Scanner(System.in);
String name = console.nextLine();
int age = console.nextInt();
Створюємо обʼєкт класу 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

Усе, що стоїть ліворуч від знака рівності, — це оголошення змінної типу 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.

1
Опитування
Знайомство з типами int і String, рівень 2, лекція 5
Недоступний
Знайомство з типами int і String
Знайомство з типами int і String
Коментарі
ЩОБ ПОДИВИТИСЯ ВСІ КОМЕНТАРІ АБО ЗАЛИШИТИ КОМЕНТАР,
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ