Вывод и ввод данных в консоль Java
Консоль (console) в Java обеспечивает простое и удобное взаимодействия с пользователем. С помощью консоли можно выводить какую-нибудь информацию либо, напротив, используя консоль, считывать данные. В этой статье будет рассказано о том, как осуществляется ввод и вывод данных в консоли Java.
Чтобы обеспечивать взаимодействие с консолью, в языке программирования Java используют класс System.
Вывод на консоль в Java
Чтобы создать потока вывода в вышеупомянутый класс System, вам понадобится специальный объект out. В нём определен метод println, обеспечивающий вывод значения на консоль и перевод курсора консоли на другую строку.
Рассмотрим практический пример с Hello world:
Что здесь происходит? В метод println осуществляется передача значения (в нашем случае это строка), которое пользователь желает вывести в консоль Java. Консольный вывод данных в Джава будет следующий:
Выполнять перевод строки не обязательно. Если необходимость в этом отсутствует, применяют метод System.out.print() . Он аналогичен println, но перевод каретки на следующую строку не выполняется.
Однако никто не мешает, используя System.out.print, всё же выполнить перенос на следующую строку. Как вариант — использование \n:
System.out.print("Привет, мир! \n");Также есть возможность подставить в строку Ява данные, которые объявлены в переменных. Вот, как это реализуется:
Ещё в Java существует функция, предназначенная для форматирования вывода в консоли, — System.out.printf() . При использовании со спецификаторами, она позволяет добиться нужного формата вывода.
Спецификаторы: • %d — для вывода в консоль целочисленных значений; • %x — для 16-ричных чисел; • %f — выводятся числа с плавающей точкой; • %e — для чисел в экспоненциальной форме (1.3e+01); • %c — вывод в консоль одиночного символа; • %s — вывод в консоль строковых значений.
Рассмотрим, как это функционирует на практике:
Когда осуществляется вывод в консоль Java значений с плавающей точкой, есть возможность задать количество знаков после запятой. Спецификатор %.2f (точнее, «.2») определяет, что будет 2 знака после запятой. Вывод в консоль Java будет следующим:
Name: Bob Age: 40 Height: 1.80Ввод с консоли Java или как ввести данные с консоли Джавы
Чтобы обеспечить ввод с консоли Java, в классе System есть объект in. Именно через объект System.in работать не очень удобно, поэтому часто применяют класс Scanner. Он уже, в свою очередь, как раз таки и применяет System.in.
Рассмотрим практический пример:
import java.util.Scanner; public class Main < public static void main(String[] args) < Scanner in = new Scanner(System.in); System.out.print("Введите любой номер: "); int num = in.nextInt(); System.out.printf("Ваш номер: %d \n", num); in.close(); >>Сам по себе класс Scanner хранится в пакете java.util, поэтому в начале кода мы выполняем его импорт посредством команды import java.util.Scanner.
Для создания непосредственно объекта Scanner в его конструктор осуществляется передача объекта System.in. Далее можно получать значения. В нашей мини-программе сначала выводится просьба ввести номер, а потом введённое пользователем число помещается в переменную num (для получения введённого значения задействуется метод in.nextInt() , возвращающий набранное на клавиатуре целочисленное значение.
Лучше всего попробовать работу этой программы с помощью одного из многочисленных онлайн-компиляторов.
Работать она будет простейшим образом: 1. Сначала вы увидите сообщение в консоли «Введите любой номер:». 2. После ввода числа (пускай это будет 8) в консоли появится второе сообщение — «Ваш номер: 8».
Для класса Scanner предусмотрены и другие методы: • next() — для считывания введённой строки до первого пробела; • nextLine() — для всей введённой строки; • nextInt() — считывает введённое число int; • nextDouble() — для double; • nextBoolean() — для boolean; • nextByte() — для byte; • nextFloat() — для float; • nextShort() — для short.
Давайте напишем простую программу, обеспечивающую ввод информационных данных о человеке в консоль Java:
import java.util.Scanner; public class Main < public static void main(String[] args) < Scanner in = new Scanner(System.in); System.out.print("Введите имя: "); String name = in.nextLine(); System.out.print("Введите возраст: "); int age = in.nextInt(); System.out.print("Введите вес: "); float height = in.nextFloat(); System.out.printf("Name: %s Age: %d Height: %.1f \n", name, age, height); in.close(); >>В этой программке пользователь последовательно вводит данные разных типов: String, int и float. Потом вся информация выводится в консоль Java:
Введите имя: Андрей Введите возраст: 39 Введите вес: 89 Name: Андрей Age: 39 Height: 89.0Вот и всё. Это базовые вещи, если же вас интересуют более продвинутые знания, записывайтесь на курс OTUS в Москве:
Ввод строк java консоль
Наиболее простой способ взаимодействия с пользователем представляет консоль: мы можем выводить на консоль некоторую информацию или, наоборот, считывать с консоли некоторые данные. Для взаимодействия с консолью в Java применяется класс System , а его функциональность собственно обеспечивает консольный ввод и вывод.
Вывод на консоль
Для создания потока вывода в класс System определен объект out . В этом объекте определен метод println , который позволяет вывести на консоль некоторое значение с последующим переводом курсора консоли на следующую строку. Например:
В метод println передается любое значение, как правило, строка, которое надо вывести на консоль. И в данном случае мы получим следующий вывод:
При необходимости можно и не переводить курсор на следующую строку. В этом случае можно использовать метод System.out.print() , который аналогичен println за тем исключением, что не осуществляет перевода на следующую строку.
Консольный вывод данной программы:
Но с помощью метода System.out.print также можно осуществить перевод каретки на следующую строку. Для этого надо использовать escape-последовательность \n:
System.out.print("Hello world \n");Нередко необходимо подставлять в строку какие-нибудь данные. Например, у нас есть два числа, и мы хотим вывести их значения на экран. В этом случае мы можем, например, написать так:
public class Program < public static void main(String[] args) < int x=5; int y=6; System.out.println("x=" + x + "; y console">x=5; y=6Но в Java есть также функция для форматированного вывода, унаследованная от языка С: System.out.printf() . С ее помощью мы можем переписать предыдущий пример следующим образом:
int x=5; int y=6; System.out.printf("x=%d; y=%d \n", x, y);В данном случае символы %d обозначают спецификатор, вместо которого подставляет один из аргументов. Спецификаторов и соответствующих им аргументов может быть множество. В данном случае у нас только два аргумента, поэтому вместо первого %d подставляет значение переменной x, а вместо второго - значение переменной y. Сама буква d означает, что данный спецификатор будет использоваться для вывода целочисленных значений.
Кроме спецификатора %d мы можем использовать еще ряд спецификаторов для других типов данных:
- %x : для вывода шестнадцатеричных чисел
- %f : для вывода чисел с плавающей точкой
- %e : для вывода чисел в экспоненциальной форме, например, 1.3e+01
- %c : для вывода одиночного символа
- %s : для вывода строковых значений
При выводе чисел с плавающей точкой мы можем указать количество знаков после запятой, для этого используем спецификатор на %.2f , где .2 указывает, что после запятой будет два знака. В итоге мы получим следующий вывод:
Name: Tom Age: 30 Height: 1,70
Ввод с консоли
Для получения ввода с консоли в классе System определен объект in . Однако непосредственно через объект System.in не очень удобно работать, поэтому, как правило, используют класс Scanner , который, в свою очередь использует System.in . Например, напишем маленькую программу, которая осуществляет ввод чисел:
import java.util.Scanner; public class Program < public static void main(String[] args) < Scanner in = new Scanner(System.in); System.out.print("Input a number: "); int num = in.nextInt(); System.out.printf("Your number: %d \n", num); in.close(); >>
Так как класс Scanner находится в пакете java.util , то мы вначале его импортируем с помощью инструкции import java.util.Scanner .
Для создания самого объекта Scanner в его конструктор передается объект System.in . После этого мы можем получать вводимые значения. Например, в данном случае вначале выводим приглашение к вводу и затем получаем вводимое число в переменную num.
Чтобы получить введенное число, используется метод in.nextInt(); , который возвращает введенное с клавиатуры целочисленное значение.
Input a number: 5 Your number: 5
Класс Scanner имеет еще ряд методов, которые позволяют получить введенные пользователем значения:
- next() : считывает введенную строку до первого пробела
- nextLine() : считывает всю введенную строку
- nextInt() : считывает введенное число int
- nextDouble() : считывает введенное число double
- nextBoolean() : считывает значение boolean
- nextByte() : считывает введенное число byte
- nextFloat() : считывает введенное число float
- nextShort() : считывает введенное число short
То есть для ввода значений каждого примитивного типа в классе Scanner определен свой метод.
Например, создадим программу для ввода информации о человеке:
import java.util.Scanner; public class Program < 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(); >>
Здесь последовательно вводятся данные типов String, int, float и потом все введенные данные вместе выводятся на консоль. Пример работы программы:
Input name: Tom Input age: 34 Input height: 1,7 Name: Tom Age: 34 Height: 1,70
Обратите внимание, что для ввода значения типа float (то же самое относится к типу double) применяется число "1,7", где разделителем является запятая, а не "1.7", где разделителем является точка. В данном случае все зависит от текущей языковой локализации системы. В моем случае русскоязычная локализация, соответственно вводить необходимо числа, где разделителем является запятая. То же самое касается многих других локализаций, например, немецкой, французской и т.д., где применяется запятая.
Ввод строк java консоль
"Но System.in и BufferedReader не совместимы друг с другом, поэтому мы используем переходник – еще один объект InputStreamReader" в данном случае под переходником имеется в виду шаблон Адаптер
Может, стоило для начала объяснить что такое объекты и классы для того чтобы оперировать этими понятиями, так как на данный момент мы изучили только переменные и методы.
Непонятно: говориться что в System.in храниться объект класса InputStream. Но InputStream это абстрактный класс у него не может быть объектов как так-то?
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
100% после прочтения этой бесполезной лекции, вы потеряли нить, зачем это все, посмотрите видеоролик, там очень доступно объясняют про то, как считывается поток вводных данных, что вообще такое поток и т.д Я считаю, что проектировщики плана обучения должны обязательно внести дополнения в эту лекцию, раз они начали здесь уже задвигать про ввод данных, это просто must have. Непонимание этой вещи вредит здоровью хуже, чем курение, наркотики и виски без льда.
не пользуйтесь Scanner-ом. у него есть 2 метода 1 - next() 2 - nextLine() они оба читают строку(но первый читает 1 слово, а 2 строку целиком) и в этом как раз загвоздка. Там дальше по заданию нужно будет считать строку и число и в этот момент вас ждет неприятный сюрприз: после считывания строки методом nextLine() у вас считывание числа не будет(программа завершится), а ошибку найти будет очень не просто. Многие наступали на эти грабли. Так что учите BufferedReader, как только поймете как составляются цепочки проблем с вводом данных дальше не будет.
Либо я дебил, либо лыжи не едут. Видеоурок вообще не о чем, как и лекция. Не представляю как бы я решал задачу в следующей лекции, если бы не наткнулся на "Java Syntax Pro 2 уровень, 5 лекция". Чтобы вы понимали, сейчас мы находимся на лекциях для начинающих и нормальное объяснение я нашел только на лекции уровня про. Плюс я не очень понимаю зачем нужно проходить то, что в реальной практике никогда не будет нужно?? "Использовать Scanner довольно удобно, но от этого не очень много пользы. Дело в том, что в будущем (и в учебе, и на работе) ты будешь часто использовать объекты BufferedReader и InputStreamReader и очень-очень редко объект типа Scanner. В данной ситуации он удобен, но в будущем толку от него мало. Так что мы пользоваться им не будем."
я 20 минут пытался понять какого-то дядю, который объяснял кое как или его выступление было вырвано из контекста других лекций. но потом мне говорят, что этот сканер мне не надо. а нужен какой-то буфер, который работает только с каким-то костылем. (((