System in java что это
Перейти к содержимому

System in java что это

  • автор:

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

В Java используются два основных способа ввода данных с клавиатуры:

  • С помощью метода readLine() объекта, порожденного от класса BufferdReader из пакета java.io.
  • С помощью nextLine() и других методов объекта, созданного от класса Scanner из пакета java.util.

Однако в обоих случаях изначально используется System.in – объект класса InputStream, присвоенный переменной in, находящейся в классе System пакета java.lang. Данный объект выполняет функцию стандартного потока ввода, т. е. ввода с клавиатуры. (В то время как System.out – стандартный поток вывода.)

В Java объект System.in обеспечивает низкоуровневый ввод, при котором методом read() считываются байты. Например, если ввести «ab» и нажать Enter, будет прочитано три байта. В десятичном представлении значение первого байта будет соответствовать символу «a» по таблице символов, второго – символу «b», третьего – символу перехода на новую строку.

Если же ввести букву национального алфавита, которая не может кодироваться одним байтом, то каждый ее составляющий байт будет прочитан по отдельности.

Для преобразования байтов в символы, а затем в строки полученное от System.in передают в конструкторы классов-оберток. Обертки используют функционал переданного им объекта, но дополняют его своим.

Первая обертка – класс InputStreamReader, который преобразует набор байтов в символ. Класс BufferedReader буферизует ввод, обеспечивая считывание из потока ввода (клавиатура это или файл – не важно) целых строк, что делает процесс более быстрым.

import java.io.IOException; import java.io.BufferedReader; import java.io.InputStreamReader; public class Buffered { public static void main(String[] args) throws IOException { BufferedReader reader = new BufferedReader( new InputStreamReader(System.in)); String title = reader.readLine(); String pagesStr = reader.readLine(); int pages = Integer.parseInt(pagesStr); System.out.println(title); System.out.println(pages+1); } }

Выражение BufferedReader reader = new BufferedReader(new InputStreamReader(System.in)); есть сокращенная запись от:

InputStream a = System.in; InputStreamReader b = new InputStreamReader(a); BufferedReader reader = new BufferedReader(b);

В случае Scanner дело обстоит попроще, так как класс может больше:

import java.util.Scanner; public class Scan  public static void main(String[] args)  Scanner scanner = new Scanner(System.in); String title = scanner.nextLine(); int pages = scanner.nextInt(); System.out.println(title); System.out.println(pages + 1); > >

У сканера есть методы, проверяющие тип вводимых данных (hasNextInt() и т. п.). Несмотря на удобство Scanner, если надо просто считывать строки без их анализа, предпочитают использовать BufferedReader, так как он работает быстрее. В остальном выбор зависит от специфики задачи.

X Скрыть Наверх

Программирование на Java. Курс

Что такое System.out.print в Java?

В языке программирования Java вывод на консоль осуществляется с использованием метода println() объекта System.out . Этот метод принимает аргумент и выводит его значение на стандартный вывод, зачастую на консоль.

Основные аспекты вывода в Java:

  • System.out.println() — это метод для вывода текста или значения переменной на консоль с последующим переводом строки.
  • Пример использования:
System.out.println("Привет, мир!"); 
  • Значения переменных могут быть выведены на консоль, что особенно полезно при отладке программы.
int number = 42; System.out.println("Значение переменной: " + number); 
  • Метод printf() позволяет более гибко форматировать вывод, аналогично функции printf в языке С.
String name = "John"; int age = 25; System.out.printf("Имя: %s, Возраст: %d лет%n", name, age); 
  • Специальные символы, такие как %n , используются для перехода на новую строку, что делает вывод более читаемым.
System.out.println("Это первая строка.%nЭто вторая строка.");

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

Для того чтобы пользователь мог что-то ввести с клавиатуры, существует стандартный поток ввода, представленный объектом System.in. Рассмотрим, как это происходит.

Для ввода данных с клавиатуры в Java используется метод System.in.read() — он возвращает код введенного символа. После его выполнения JVM останавливает программу и ждет, пока пользователь введет символ с клавиатуры. Для того чтобы вывести сам символ на консоль, выполняется его приведение к типу char :

public class SystemInDemo < public static void main(String[] args) throws IOException < int x = System.in.read(); char c = (char) x; System.out.println("Код символа: " + c + " language-java">import java.util.Scanner;

Методы этого класса позволяют считывать строку, значение типа int или double .

Методы класса Scanner :

  1. hasNextInt() - возвращает true если с потока ввода можно считать целое число.
  2. nextInt() - считывает целое число с потока ввода.
  3. hasNextDouble() - проверяет, можно ли считать с потока ввода вещественное число типа double .
  4. nextDouble() - считывает вещественное число с потока ввода.
  5. nextLine() - позволяет считывать целую последовательность символов, то есть строку.
  6. hasNext() - проверяет, а остались ли в потоке ввода какие-то символы.

В следующем примере метод hasNextInt() проверяет, ввел ли пользователь целое число. И с помощью метода nextInt() считываем введенное число. Если пользователь ввел строку, то программа выведет на консоль "Вы ввели не целое число":

import java.util.Scanner; public class ScannerDemo1 < public static void main(String[] args) < Scanner scanner = new Scanner(System.in); System.out.print("Введите целое число: "); if (scanner.hasNextInt()) < int i = scanner.nextInt(); System.out.println(i); >else < System.out.println("Вы ввели не целое число"); >> >

Рассмотрим пример, в котором используется метод nextDouble() для считывания дробного числа. Если же пользователь введет строку, то программа завершится с ошибкой времени выполнения. Чтобы этого не происходило, перед вызовом метода nextDouble() , сделайте проверку с помощью метода hasNextDouble() :

import java.util.Scanner; public class ScannerDemo2 < public static void main(String[] args) < Scanner scanner = new Scanner(System.in); // если ввести букву s, // то случится ошибка во время исполнения double i = scanner.nextDouble(); System.out.println(i); >>

Следующий пример использует метод nextLine() для считывания всей строки:

import java.util.Scanner; public class ScannerDemo3 < public static void main(String[] args) < Scanner scanner = new Scanner(System.in); String s1, s2; s1 = scanner.nextLine(); s2 = scanner.nextLine(); System.out.println(s1 + s2); >>

Презентацию с видео можно скачать на Patreon .

Java: Как работает InputStream и System.in.read();

Не могу понять откуда взялось значение 49. Каким образом метод read() преобразовал 100 в 49? Объясните подробно пожалуйста.

Отслеживать
задан 24 апр 2020 в 17:53
user384849 user384849
Метод read считывает байт. В этом байте код символа '1' - 49.
24 апр 2020 в 18:01
Каким образом метод read из 100 получил 49?
– user384849
24 апр 2020 в 18:11
Не из 100, а из "1".
24 апр 2020 в 18:15

@остапбендер "100" - это три символа "1", "0" и ещё один "0". Код символа 1 - это 49. Метод read считывает один байт, то есть только первый символ.

24 апр 2020 в 18:17

Потому что метод read считывает только один символ. Вы можете ввести хоть 100500 символов, считан будет только один. И не путайте 1 (число) и "1" (текст, строка).

24 апр 2020 в 18:59

1 ответ 1

Сортировка: Сброс на вариант по умолчанию

Как уже писали выше, метод System.in.read() считывает лишь первый символ какой угодно строки и в переменную типа int кладёт значение символа согласно некоторой системе кодировки символов (например, ASCII). В данном случае считывается символ '1', код которого равен 49.

Отслеживать
ответ дан 24 апр 2020 в 18:24
Евгений Курмыса Евгений Курмыса
25 3 3 бронзовых знака

Похожие

Подписаться на ленту

Лента вопроса

Для подписки на ленту скопируйте и вставьте эту ссылку в вашу программу для чтения RSS.

Дизайн сайта / логотип © 2024 Stack Exchange Inc; пользовательские материалы лицензированы в соответствии с CC BY-SA . rev 2024.4.26.8280

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *