Наиболее простой способ взаимодействия с
пользователем представляет консоль: мы можем выводить в консоль некоторую
информацию или, наоборот, считывать из консоли какие-либо данные.
Для вывода информации в консоль
используется класс System и его объект out. У этого
объекта есть несколько полезных распространенных функций для вывода:
-
System.out.print – вывод данных
без перехода на следующую строку;
-
System.out.println – вывод данных
с переходом на новую строку;
-
System.out.printf – форматированный
вывод данных.
Рассмотрим их по порядку. Если в
программе вызвать два вот таких метода:
то в консоле мы увидим сообщение «Hello World!» в одну
строку, без переноса строк, так как метод print не выполняет
автоматический перенос на следующую строку. Правда мы можем сделать это
самостоятельно, если пропишем символ ‘\n’ – перевода
строки после первого слова «Hello»:
В этом случае второе слово будет
отображаться на следующей строке. Запомним этот символ переноса строки. Это
универсальный символ, который применяется повсюду, а не только в этой функции.
Если же нам нужно вывести сообщение в
строку с автоматическим переходом на новую строку, то вместо print следует
использовать метод println:
Смотрите, здесь нет символа перевода
строки, но слово «World!» все равно отобразилось с новой
строки. Вот в этом отличие между print и println.
Далее, с помощью этих функций можно
выводить значения переменных, используя такие варианты:
short x = 5;
double y = 4.5;
System.out.println(x);
System.out.println("x = " + x);
System.out.println("x = " + x + ", y = " + y);
Вот эти плюсы здесь означают соединение
двух строк, т.е. в конец первой строки добавляется вторая (либо числовое
значение переменной, которое затем будет представлено в виде единой строки).
Наконец, для тех кто знаком с языком С/С++
в Java есть функция printf, которая
работает также и служит для форматированного вывода информации в консоль.
Синтаксис этого метода такой:
System.out.printf(<шаблон формата>, [список аргументов]);
Например, мы можем вывести переменные x и y с помощью этой
функции так:
short x = 5;
double y = 4.5;
float z = 1.2f;
System.out.printf("x = %d, y = %f, z = %.2f\n", x, y, z);
Здесь вот эти %d, %f – это так
называемые спецификаторы, на место которых подставляется значение
соответствующей переменной, указанных после шаблона. Причем, %d – спецификатор
для вывода целочисленных значений, %f – для вещественных. Наиболее
употребительные спецификаторы следующие:
- %d – для
целочисленных значений;
- %f – для
вещественных значений;
- %.nf –вывод
вещественного значения с точностью до n-го знака после запятой;
- %c – для
отдельного символа (тип char);
- %s – для строк;
- %% - вывод процентов.
Обратите внимание, когда мы
инициализировали переменную z вещественным значением, то в конце
поставили букву f. Эта буква определяет вещественное число типом float. Если такая
буква отсутствует у вещественного числа, то оно по умолчанию определяется как double.
С выводом данных в целом разобрались.
Теперь посмотрим как можно вводить данные с клавиатуры. Для этого в классе System определен
объект in. Но через него
не очень удобно работать. Поэтому используют другой класс Scanner, который
является некой надстройкой над объектом System.in и предоставляет
более удобный инструментарий для ввода значений с клавиатуры.
Этот класс определен в пакете java.util,
поэтому для доступа к нему следует сначала прописать этот пакет, а затем, указать
сам класс:
java.util.Scanner in = new java.util.Scanner(System.in);
Но каждый раз вот так прописывать java.util.Scanner
не очень то удобно. Поэтому мы сделаем так. Импортируем этот пакет с классом Scanner в нашу
программу:
import java.util.Scanner;
И теперь все можно записать проще:
Scanner in = new Scanner(System.in);
Далее, мы здесь создаем новый объект Scanner с помощью
оператора new и будем
работать с этим объектом через ссылку in на него. Позже в
других уроках мы еще будем подробнее говорить о создании объектов и ссылках на
них. Сейчас просто запомните, что вот так создаются объекты в Java.
Теперь через ссылку in мы можем
обращаться к открытым методам объекта Scanner. Например, для
ввода целочисленных значений, достаточно записать:
Мы здесь объявляем переменную num и сразу ее
инициализируем значением, введенным с клавиатуры. То есть, метод nextInt() объекта Scanner реализует ввод
целочисленного значения и, затем, возвращает полученный результат.
Далее, выведем введенное значение в
консоль, чтобы убедиться, что все работает:
System.out.printf("Your number: %d \n", num);
И после окончания работы с входным
потоком, его нужно закрыть:
Вот пример ввода целочисленного значения
с клавиатуры. В общем случае в классе Scanner реализованы
такие полезные методы:
-
next():
считывает введенную строку до первого пробела;
-
nextLine():
считывает введенную строку до перевода строки;
-
nextByte():
считывает введенное число как byte;
-
nextShort():
считывает введенное число как short;
-
nextInt():
считывает введенное число как тип int;
-
nextDouble():
считывает введенное число как double;
-
nextFloat():
считывает введенное число как float;
-
nextBoolean():
считывает значение boolean.
То есть для ввода значений каждого
примитивного типа в классе Scanner определен свой метод. Что очень удобно. Например,
напишем такую программу для ввода информации о человеке:
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
System.out.print("Input name: ");
String name = in.nextLine();
System.out.print("Input age: ");
int age = in.nextInt();
System.out.print("Input height: ");
float height = in.nextFloat();
System.out.printf("Name: %s Age: %d Height: %.2f \n", name, age, height);
in.close();
}
}
И обратите внимание, когда мы вводим
вещественное значение, то мне приходится вводить его через запятую. Если
пишется точка, то возникает исключение некорректного ввода данных. Это связано
с настройкой языковой локализации на конкретном компьютере. И у вас, возможно,
с другой настройкой нужно будет писать точку. Вот такой существует нюанс,
который сейчас просто имейте в виду.
Вот так в Java реализуется
консольный вывод и ввод информации. И вы теперь знаете как это все работает.