Как сделать ввод с клавиатуры в 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 вы можете в документации .
Ввод данных с клавиатуры
В 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 применяются несколько способов ввода данных с клавиатуры: c помощью метода readLine() класса BufferedReader или метода nextLine() класса Scanner. Разберем подробнее, как работают эти методы.
Освітній курс від laba: PR-комунікації.
Побудуйте успішний образ вашого бренду.
Метод readLine()
BufferedReader readLine() применяется для чтения одной строки текста, который пользователь ввел с консоли. Конец строки в коде может быть указан как Enter, так и \n , \r или EOF — end of file.
BufferedReader readLIne() работает только со строками в коде. А метод Scanner nextLine() считывает и другие типы данных, например, int, long, double, float.
BufferedReader работает немного быстрее по сравнению со Scanner, потому что nextLine() анализирует данные, а readLine() просто считывает последовательность символов.
Так работает readLine():
Професійний курс від skvot: PR basis.
Засвоєте основи PR та комунікації.
// Java program to illustrate // BufferedReader readLine() method import java.io.*; public class GFG < public static void main(String[] args) < // Read the stream 'demo.txt' // containing text // "GEEKS" // "FOR" // "GEEKS" FileReader fileReader = new FileReader( "c:/demo.txt"); // Convert fileReader to // bufferedReader BufferedReader buffReader = new BufferedReader( fileReader); while (buffReader.ready()) < System.out.println( buffReader.readLine()); >> >
GEEKS FOR GEEKS
И на экран, соответственно, выводится:
GEEKS FOR GEEKS
Метод nextLine()
NextLine() в Java применяется для класса Scanner. Этот метод так же, как и readLine(), нужен для получения и чтения данных, написанных пользователем. Чтобы применить nextLine(), в коде нужно прописать объект Scanner.
Этот метод читает и воспроизводит данные до конца строки. Другими словами, он может считывать информацию до тех пор, пока не начнется новая строка или старая не будет разорвана с помощью \n или Enter.
Вот как nextLine() работает в Java:
public class Main < public static void main(String[] args) < Scanner scanner = new Scanner("Дни бегут, мы выходим в поле,\n" + "Птицы в небе и дети в школе,\n" + "Шум и пение, тьма и свет,\n" + "Сердце новое, смерти нет"); String s = scanner.nextLine(); System.out.println(s); >>
Что пишет пользователь:
Дни бегут, мы выходим в поле Птицы в небе и дети в школе Шум и пение, тьма и свет Сердце новое, смерти нет
Что показывает программа:
Дни бегут, мы выходим в поле
Метод nextLine работает с данными только одной строки, поэтому остальное стихотворение теряется из-за разрыва между предложениями и перехода на новую строчку.
Чтобы показать стих полностью, нужно написать следующий код:
Експертний курс від skvot: Unreal Еngine: від інтерфейсу до запуску гри.
Запустіть свою гру з Unreal.
public class Main < public static void main(String[] args) < Scanner scanner = new Scanner("Дни бегут, мы выходим в поле,\n" + "Птицы в небе и дети в школе,\n" + "Шум и пение, тьма и свет,\n" + "Сердце новое, смерти нет"); String s = scanner.nextLine(); System.out.println(s); s = scanner.nextLine(); System.out.println(s); s = scanner.nextLine(); System.out.println(s); s = scanner.nextLine(); System.out.println(s); >>
Классы-обертки в Java
Класс-обертка — это класс, объект которого содержит примитивные типы данных. Когда мы создаем объект для класса-обертки, он содержит поле, в котором мы можем хранить примитивные типы данных.
Как работают классы-обертки:
- Они преобразуют примитивные типы данных в объекты. Это необходимо, когда мы хотим изменить аргументы, передаваемые через метод (поскольку примитивные типы передаются только через value).
- В пакете java.util классы могут обрабатывать только объекты, и в этом случае помогут обертки.
В коде процесс создания классов-оберток выглядят так:
// Java program to demonstrate Autoboxing import java.util.ArrayList; class Autoboxing < public static void main(String[] args) < char ch = 'a'; // Autoboxing- primitive to Character object conversion Character a = ch; ArrayListarrayList = new ArrayList(); // Autoboxing because ArrayList stores only objects arrayList.add(25); // printing the values from object System.out.println(arrayList.get(0)); > >
А если нужно совершить обратный процесс и преобразовать класс-обертку в примитивный тип, то придется совершить unboxing или распаковку данных:
// Java program to demonstrate Unboxing import java.util.ArrayList; class Unboxing < public static void main(String[] args) < Character ch = 'a'; // unboxing - Character object to primitive conversion char a = ch; ArrayListarrayList = new ArrayList(); arrayList.add(24); // unboxing because get method returns an Integer object int num = arrayList.get(0); // printing the values from primitive data types System.out.println(num); > >
Как ввести строку с клавиатуры в java
Для того, чтобы в Java получить строку, которую вводит пользователь, можно использовать класс java.util.Scanner и его методы:
// импортируем класс Scanner для работы с ним import java.util.Scanner; public class Main public static void main(String[] args) // создаем новый объект класса Scanner // передаем в конструктор входной поток System.in Scanner sc = new Scanner(System.in); System.out.println("Введите данные:"); // вызываем метод nextLine() у объекта sc класса Scanner // программа будет ожидать ввод данных пользователем int number = sc.nextLine(); // предположим, что пользователь ввел "Hello, world!" System.out.println("Спасибо! Вы ввели " + number); // => Спасибо! Вы ввели Hello, world! > >
Программа ожидает ввод данных пользователем только тогда, когда вызываются соответствующие методы, например nextLine() , nextInt() , next() . Они и множество других методов класса Scanner возвращают данные разных типов из входного потока.
Подробнее ознакомиться с классом Scanner и его методами можно в официальной документации