Как ввести с клавиатуры в java
Перейти к содержимому

Как ввести с клавиатуры в java

  • автор:

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

Для того чтобы пользователь мог что-то ввести с клавиатуры, существует стандартный поток ввода, представленный объектом 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 используются два основных способа ввода данных с клавиатуры:

  • С помощью метода 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. Курс

Как ввести массив с клавиатуры в java

Для ввода массива с клавиатуры в Java можно использовать класс Scanner из стандартной библиотеки Java . Например, чтобы ввести массив целых чисел с клавиатуры, можно использовать следующий код:

import java.util.Scanner; public class Main  public static void main(String[] args)  Scanner scanner = new Scanner(System.in); System.out.print("Введите длину массива: "); int length = scanner.nextInt(); int[] array = new int[length]; System.out.println("Введите элементы массива:"); for (int i = 0; i  length; i++)  array[i] = scanner.nextInt(); > System.out.println("Массив: " + Arrays.toString(array)); > > 
  • В этом примере мы создали объект класса Scanner , который позволяет считывать данные из стандартного потока ввода (клавиатуры).
  • Затем мы запросили у пользователя длину массива и создали массив нужного размера.
  • После этого мы в цикле заполняем массив элементами, вводимыми с клавиатуры, с помощью метода nextInt() объекта Scanner.
  • Наконец, мы выводим полученный массив на экран с помощью метода toString() класса Arrays

Для ввода массива других типов данных нужно использовать соответствующие методы класса Scanner , например, nextDouble() для ввода массива вещественных чисел.

Как сделать ввод с клавиатуры в java

В Java для введения данных с клавиатуры можно использовать класс Scanner , который позволяет получать данные от пользователя через стандартный поток ввода System.in .

Вот пример кода, который считывает целое число с клавиатуры:

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

В этом примере мы выполняем следующие действия:

  • создаем объект класса Scanner и передаем ему стандартный поток ввода System.in ;
  • затем мы выводим приглашение для пользователя с помощью метода print() и считываем введенное пользователем целое число с помощью метода nextInt() ;
  • наконец, мы выводим считанное число на экран с помощью метода println()

Обратите внимание, что метод nextInt() блокирует выполнение программы, пока пользователь не введет целое число. Если пользователь введет не число, то программа выбросит исключение InputMismatchException

Аналогичным образом можно считывать переменные других типов данных: nextDouble() для типа double , nextLong() для типа long , nextFloat() для типа float , nextBoolean() для типа boolean , nextByte() для типа byte , nextShort() для типа short , nextLine() для типа String и т.д.

Подробнее ознакомиться с классом java.util.Scanner вы можете в документации .

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

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