Encodera

Спасибо, что читаете!

Пожертвуйте сайту, мы стараемся ради вас.

Оглавление

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

Программа становится интереснее, когда она отвечает пользователю. В Java 25 прочитать строку с клавиатуры можно одним вызовом IO.readln(), а в старом коде для этого используют класс Scanner.

IO.readln

IO.readln() выводит подсказку, ждёт, пока пользователь наберёт текст и нажмёт Enter, и возвращает введённое как String:

void main() {
    String name = IO.readln("Как вас зовут? ");
    IO.println("Привет, " + name + "!");
}

Результат (пользователь ввёл Анна):

Как вас зовут? Анна
Привет, Анна!

Программа остановится на readln() и будет ждать ввода. Без аргумента IO.readln() читает строку без подсказки.

Ввод чисел

readln() всегда возвращает строку, даже если пользователь набрал цифры. Чтобы считать с ними, строку превращают в число через Integer.parseInt():

void main() {
    int year = Integer.parseInt(IO.readln("Год рождения: "));
    IO.println("В 2030 году вам будет " + (2030 - year));
}

Результат (пользователь ввёл 1995):

Год рождения: 1995
В 2030 году вам будет 35

Для дробных чисел используйте Double.parseDouble(). Если пользователь введёт не число, parseInt() выбросит исключение NumberFormatException — такой пример есть в уроке о преобразовании типов.

Несколько значений

Каждый вызов readln() читает одну строку, поэтому несколько значений просто читают по очереди:

void main() {
    int a = Integer.parseInt(IO.readln("Первое число: "));
    int b = Integer.parseInt(IO.readln("Второе число: "));
    IO.println("Сумма: " + (a + b));
}

Результат (пользователь ввёл 7 и 5):

Первое число: 7
Второе число: 5
Сумма: 12

Scanner

До Java 25 ввод читали классом Scanner. Его создают один раз, передав System.in — поток ввода с клавиатуры. Метод nextLine() читает строку, nextInt() — целое число:

void main() {
    Scanner scanner = new Scanner(System.in);
    IO.print("Сколько чашек кофе? ");
    int cups = scanner.nextInt();
    IO.println("К оплате: $" + cups * 3);
}

Результат (пользователь ввёл 2):

Сколько чашек кофе? 2
К оплате: $6

В короткой форме программы Scanner доступен сразу. В классической форме в начале файла нужна строка import java.util.Scanner;.

Частая ошибка

nextInt() читает только число, а перевод строки после него остаётся во вводе. Следующий nextLine() подхватывает этот остаток и сразу возвращает пустую строку:

void main() {
    Scanner scanner = new Scanner(System.in);
    IO.print("Возраст: ");
    int age = scanner.nextInt();
    IO.print("Имя: ");
    String name = scanner.nextLine();
    IO.println("[" + name + "], " + age);
}

Результат (пользователь ввёл 30 и нажал Enter):

Возраст: 30
Имя: [], 30

Программа даже не дала ввести имя. Вызовите лишний scanner.nextLine() после nextInt() или читайте всё через IO.readln() и Integer.parseInt() — так этой проблемы нет.

Спасибо, что читаете!

Пожертвуйте сайту, мы стараемся ради вас.