Наиболее простой способ ввзаимодействия с пользователем представляет консоль: мы можем выводить на консоль некоторую информацию или, наоборот, считывать с консоли некоторые данные. Для взаимодействия с консолью в Java применяется класс System , а его функциональность собственно обеспечивает консольный ввод и вывод.
Вывод на консоль
Для создания потока вывода в класс System определен объект out . В этом объекте определен метод println , который позволяет вывести на консоль некоторое значение с последующим переводом консоли на следующую строку. Например:
В метод println передается любое значение, как правило, строка, которое надо вывести на консоль. И в данном случае мы получим следующий вывод:
При необходимости можно и не переводить курсор на следующую строку. В этом случае можно использовать метод System.out.print() , который аналогичен println за тем исключением, что не осуществляет перевода на следующую строку.
Консольный вывод данной программы:
Но с помощью метода System.out.print также можно осуществить перевод каретки на следующую строку. Для этого надо использовать escape-последовательность
:
Нередко необходимо подставлять в строку какие-нибудь данные. Например, у нас есть два числа, и мы хотим вывести их значения на экран. В этом случае мы можем, например, написать так:
Консольный вывод программы:
Но в Java есть также функция для форматированного вывода, унаследованная от языка С: System.out.printf() . С ее помощью мы можем переписать предыдущий пример следующим образом:
В данном случае символы %d обозначают спецификатор, вместо которого подставляет один из аргументов. Спецификаторов и соответствующих им аргументов может быть множество. В данном случае у нас только два аргумента, поэтому вместо первого %d подставляет значение переменной x, а вместо второго – значение переменной y. Сама буква d означает, что данный спецификатор будет использоваться для вывода целочисленных значений.
Кроме спецификатора %d мы можем использовать еще ряд спецификаторов для других типов данных:
%x : для вывода шестнадцатеричных чисел
%f : для вывода чисел с плавающей точкой
%e : для вывода чисел в экспоненциальной форме, например, 1.3e+01
%c : для вывода одиночного символа
%s : для вывода строковых значений
При выводе чисел с плавающей точкой мы можем указать количество знаков после запятой, для этого используем спецификатор на %.2f , где .2 указывает, что после запятой будет два знака. В итоге мы получим следующий вывод:
Ввод с консоли
Для получения ввода с консоли в классе System определен объект in . Однако непосредственно через объект System.in не очень удобно работать, поэтому, как правило, используют класс Scanner , который, в свою очередь использует System.in . Например, напишем маленькую программу, которая осуществляет ввод чисел:
Так как класс Scanner находится в пакете java.util , то мы вначале его импортируем с помощью инструкции import java.util.Scanner .
Для создания самого объекта Scanner в его конструктор передается объект System.in . После этого мы можем получать вводимые значения. Например, в данном случае вначале выводим приглашение к вводу и затем получаем вводимое число в переменную num.
Чтобы получить введенное число, используется метод in.nextInt(); , который возвращает введенное с клавиатуры целочисленное значение.
Пример работы программы:
Класс Scanner имеет еще ряд методов, которые позволяют получить введенные пользователем значения:
next() : считывает введенную строку до первого пробела
nextLine() : считывает всю введенную строку
nextInt() : считывает введенное число int
nextDouble() : считывает введенное число double
nextBoolean() : считывает значение boolean
nextByte() : считывает введенное число byte
nextFloat() : считывает введенное число float
nextShort() : считывает введенное число short
То есть для ввода значений каждого примитивного типа в классе Scanner определен свой метод.
Например, создадим программу для ввода информации о человеке:
Здесь последовательно вводятся данные типов String, int, float и потом все введенные данные вместе выводятся на консоль. Пример работы программы:
Обратите внимание для ввода значения типа float (то же самое относится к типу double) применяется число "1,7", где разделителем является запятая, а не "1.7", где разделителем является точка. В данном случае все зависит от текущей языковой локализации системы. В моем случае русскоязычная локализация, соответственно вводить необходимо числа, где разделителем является запятая. То же самое касается многих других локализаций, например, немецкой, французской и т.д., где применяется запятая.
В код особо не вдавайтесь скопипастил с сайта. Почему помеченные строки println не выводят, как обычно, при попытке напечатать в консоль объект, что то вроде BoxPrinter@1540e19d , а печатают 10 и Hello World ?
2 ответа 2
то есть будет вызван метод toString() (он определен в классе Object ). В Вашем классе BoxPrinter этот метод переопределен:
Из-за этого в консоле Вы получаете 10 и "Hello World" вместо стандартного BoxPrinter@1540e19d.
Компилятор сделает эту строку:
Если метод toString() не определен то будет использоваться метод из класса Object, который определяется так:
Это обозначает, что сначала будет выведено расположение класса, собачка и хэш-код объекта.
При работе программы бывает необходимость выводить определённые результаты каких-либо расчётов, преобразований и прочего. Зачастую результаты хранятся в переменных, но также бывает необходимо выводить конкретный текст (например, для указания, из какой переменной было взято значение).
Слово «консоль» и слово «экран» в нашем случае синонимы, поэтому пугаться данных слов не нужно.
Собственно, консоль — это совокупность различных устройств (в том числе и устройств ввода/вывода) для взаимодействия человека и компьютера.