Ввод значений клавиатуры 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, так как он работает быстрее. В остальном выбор зависит от специфики задачи.

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

Источник

Ввод значений клавиатуры 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 минут пытался понять какого-то дядю, который объяснял кое как или его выступление было вырвано из контекста других лекций. но потом мне говорят, что этот сканер мне не надо. а нужен какой-то буфер, который работает только с каким-то костылем. (((

Источник

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

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

  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 .

Источник

🎅MnogoBlog

⛄как создать сайт на wordpress, настроить и оптимизировать wordpress

🎅MnogoBlog

Java Урок 4: Ввод чисел с клавиатуры, System.in

Для получения консольного ввода в классе System определен объект System.in. Однако, непосредственно через объект System.in не очень удобно работать, поэтому, как правило, используют класс Scanner, который, в свою очередь использует System.in (Так сложилось).
Скачать исходники для статьи можно ниже

Итак, для ввода информации с консоли надо сделать:
1. предварительно импортировать класс Scanner

2. создать объект класс Scanner. При создании объекта класса Scanner используется объект in класса System

Scanner sc = new Scanner(System.in);

Если здесь не все понятно не огорчайтесь, все станет намного яснее позже, пока просто запомните

Scanner sc = new Scanner(System.in);

3. Переменной а, типа int присваивается значение. Значение получают при помощи метода nextInt(), который прописан в классе Scanner

4. Необходимо закрыть объект sc

Таким образом, общий код программы выглядит так:

import java.util.Scanner; public class Test < // объявляется класс Test public static void main(String[] args) >

Чтобы получить введенное число, используется метод sc.nextInt(), который возвращает введенное с клавиатуры целочисленное значение.

В классе Scanner имеются еще ряд методов, которые позволяют получать не только целочисленные значения для int переменных. Есть методы, которые позволяют получать значения для других типов переменных. Некоторые из них представлены ниже:

sc.next(); считывает введенную строку до первого пробела;
sc.nextLine(); считывает всю введенную строку;
sc.nextDouble(); считывает введенное число дробного типа.

Источник

Читайте также:  Person
Оцените статью