Bazaprogram.ru

Новости из мира ПК
1 просмотров
Рейтинг статьи
1 звезда2 звезды3 звезды4 звезды5 звезд
Загрузка...

Класс scanner java

Класс сканера в Java

Scanner — это класс в пакете java.util, используемый для получения ввода примитивных типов, таких как int, double и т. Д., А также строк. Это самый простой способ чтения ввода в Java-программе, хотя и не очень эффективный, если вам нужен метод ввода для сценариев, где время является ограничением, как в конкурентном программировании.

  • Чтобы создать объект класса Scanner, мы обычно передаем предопределенный объект System.in, который представляет стандартный поток ввода. Мы можем передать объект класса File, если мы хотим прочитать ввод из файла.
  • Чтобы прочитать числовые значения определенного типа данных XYZ, используйте функцию nextXYZ (). Например, чтобы прочитать значение типа short, мы можем использовать nextShort ()
  • Для чтения строк мы используем nextLine ().
  • Чтобы прочитать один символ, мы используем next (). CharAt (0). Функция next () возвращает следующий токен / слово на входе в виде строки, а функция charAt (0) возвращает первый символ в этой строке.

Давайте посмотрим на фрагмент кода для чтения данных различных типов данных.

// Java-программа для чтения данных различных типов с использованием класса Scanner.

public class ScannerDemo1

public static void main(String[] args)

// Объявляем объект и инициализируем

// предопределенный стандартный объект ввода

Scanner sc = new Scanner(System.in);

String name = sc.nextLine();

char gender = sc.next().charAt( 0 );

// Числовой ввод данных

// можно прочитать байты, короткие и плавающие

// используя функции с похожими именами.

int age = sc.nextInt();

long mobileNo = sc.nextLong();

double cgpa = sc.nextDouble();

// Распечатать значения, чтобы проверить, был ли ввод получен правильно.

System.out.println( «Name: » +name);

System.out.println( «Gender: » +gender);

System.out.println( «Age: » +age);

System.out.println( «Mobile Number: » +mobileNo);

System.out.println( «CGPA: » +cgpa);

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

Затем мы проверяем, имеет ли вход сканера нужный нам тип, с помощью функций hasNextXYZ (), где XYZ — это интересующий нас тип. Функция возвращает true, если у сканера есть токен этого типа, в противном случае — false. Например, в приведенном ниже коде мы использовали hasNextInt (). Чтобы проверить строку, мы используем hasNextLine (). Точно так же, чтобы проверить наличие одного символа, мы используем hasNext (). CharAt (0).

Давайте посмотрим на фрагмент кода, чтобы прочитать некоторые числа из консоли и вывести их среднее значение.

// Java-программа для чтения некоторых значений с помощью Scanner
// Класс и напечатать их среднее.

public class ScannerDemo2

public static void main(String[] args)

// Объявляем объект и инициализируем

// предопределенный стандартный объект ввода

Scanner sc = new Scanner(System.in);

// Инициализируем сумму и количество входных элементов

int sum = 0 , count = 0 ;

// Проверяем, доступно ли значение int

// Чтение значения типа int

int num = sc.nextInt();

int mean = sum / count;

System.out.println( «Mean: » + mean);

Эта статья предоставлена Сукрит Бхатнагар . Если вам нравится GeeksforGeeks и вы хотите внести свой вклад, вы также можете написать статью и отправить ее по почте на contrib@geeksforgeeks.org. Смотрите свою статью, появляющуюся на главной странице GeeksforGeeks, и помогите другим вундеркиндам.

Пожалуйста, напишите комментарии, если вы обнаружите что-то неправильное, или вы хотите поделиться дополнительной информацией по обсуждаемой теме

Класс scanner java

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

Вывод на консоль

Для создания потока вывода в класс System определен объект out . В этом объекте определен метод println , который позволяет вывести на консоль некоторое значение с последующим переводом консоли на следующую строку. Например:

Читать еще:  Java security cert certpathvalidatorexception

В метод println передается любое значение, как правило, строка, которое надо вывести на консоль. И в данном случае мы получим следующий вывод:

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

Консольный вывод данной программы:

Но с помощью метода System.out.print также можно осуществить перевод каретки на следующую строку. Для этого надо использовать escape-последовательность n:

Нередко необходимо подставлять в строку какие-нибудь данные. Например, у нас есть два числа, и мы хотим вывести их значения на экран. В этом случае мы можем, например, написать так:

Консольный вывод программы:

Но в Java есть также функция для форматированного вывода, унаследованная от языка С: System.out.printf() . С ее помощью мы можем переписать предыдущий пример следующим образом:

В данном случае символы %d обозначают спецификатор, вместо которого подставляет один из аргументов. Спецификаторов и соответствующих им аргументов может быть множество. В данном случае у нас только два аргумента, поэтому вместо первого %d подставляет значение переменной x, а вместо второго — значение переменной y. Сама буква d означает, что данный спецификатор будет использоваться для вывода целочисленных значений.

Кроме спецификатора %d мы можем использовать еще ряд спецификаторов для других типов данных:

%x : для вывода шестнадцатеричных чисел

%f : для вывода чисел с плавающей точкой

%e : для вывода чисел в экспоненциальной форме, например, 1.3e+01

%c : для вывода одиночного символа

%s : для вывода строковых значений

При выводе чисел с плавающей точкой мы можем указать количество знаков после запятой, для этого используем спецификатор на %.2f , где .2 указывает, что после запятой будет два знака. В итоге мы получим следующий вывод:

Ввод с консоли

Для получения ввода с консоли в классе System определен объект in . Однако непосредственно через объект System.in не очень удобно работать, поэтому, как правило, используют класс Scanner , который, в свою очередь использует System.in . Например, напишем маленькую программу, которая осуществляет ввод чисел:

Так как класс Scanner находится в пакете java.util , то мы вначале его импортируем с помощью инструкции import java.util.Scanner .

Для создания самого объекта Scanner в его конструктор передается объект System.in . После этого мы можем получать вводимые значения. Например, в данном случае вначале выводим приглашение к вводу и затем получаем вводимое число в переменную num.

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

Пример работы программы:

Класс Scanner имеет еще ряд методов, которые позволяют получить введенные пользователем значения:

next() : считывает введенную строку до первого пробела

nextLine() : считывает всю введенную строку

nextInt() : считывает введенное число int

nextDouble() : считывает введенное число double

nextBoolean() : считывает значение boolean

nextByte() : считывает введенное число byte

nextFloat() : считывает введенное число float

nextShort() : считывает введенное число short

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

Например, создадим программу для ввода информации о человеке:

Здесь последовательно вводятся данные типов String, int, float и потом все введенные данные вместе выводятся на консоль. Пример работы программы:

Обратите внимание для ввода значения типа float (то же самое относится к типу double) применяется число «1,7», где разделителем является запятая, а не «1.7», где разделителем является точка. В данном случае все зависит от текущей языковой локализации системы. В моем случае русскоязычная локализация, соответственно вводить необходимо числа, где разделителем является запятая. То же самое касается многих других локализаций, например, немецкой, французской и т.д., где применяется запятая.

Работа со сканером в Java (ввод и вывод данных)

  • написана командой Vertex Academy. Надеемся, что она Вам будет полезна. Приятного прочтения!
  • это одна из статей из нашего «Самоучителя по Java»
Читать еще:  Класс double java

Предлагаем вспомнить 2 примера из жизни, которые как нельзя кстати будут для изучения данной темы.

  1. Когда мы путешествуем, в аэропорту наш багаж пропускают через ленту со сканером. Вот она была наша сумка на входе. Просканировал сканер сумку и работник аэропорта четко знает что ж мы там такое везём в ней.
  2. Точно также работает сканнер в магазинах. Вот был штрих-код на входе, отсканировал штрих-код продавец и теперь всё-всё знает о продукте, который числится под этим штрих-кодом.

Чем то схожие задачи есть и в мире программирования на Java. Например, часто необходимо выполнить такие задачи:

  • Пользователь ввёл в консоли какое-то число. А программа должна считать с консоли, какое же число ввёл пользователь.
  • Пользователь ввёл в консоли какое-то слово. А программа должна считать с консоли, какое же слово ввёл пользователь.

Для решения таких задач в Java используется сканер (от англ. Scanner). Запомните: если что-то ввели в консоли, а нам надо считать что же именно ввели — используем сканер.

Итак, рассмотрим несколько примеров кода, после которых Вы:

  1. Поймёте на практике как работает сканер. Всего в статье будет 6 примеров кода. Рекомендуем все примеры кода запускать на своём компьютере и на практике изучать как это работает.
  2. Освоите 4 метода сканера:

Методы — это, грубо говоря, действия , которые может выполнять Scanner. На самом деле методов у сканера намного больше. Но на данном этапе Вам будет достаточно этих 4 методов. Ну что, поехали.

Пример №1 — с методом nextInt ()

Допустим, мы хотим, чтоб пользователь ввёл в консоль любое целое число от 1 до 10 , а программа вывела ему ответ, какое именно число он ввёл.

Поскольку нам необходимо как бы «сосканировать», какое число ввёл пользователь, всё логично — нам понадобится сканер. Ниже приводим решение и комментарии к решению.

Чтение ввода с консоли

Ключевой момент: чтение ввода с консоли даёт возможность программе принимать ввод от пользователя

В предыдущем параграфе значение radius было зафиксировано в исходном коде. Чтобы использовать другой радиус, нужно каждый раз менять исходный код и перекомпилировать программу. Очевидно, что это не удобно, поэтому вместо такого подхода, вы можете использовать класс Scanner для консольного ввода.

Java использует System.out для обращения к стандартному устройству вывода и System.in для стандартного устройства ввода. По умолчанию, устройство вывода – это дисплей монитора, а устройство ввода – это клавиатура. Для выполнения консольного вывода, вы просто используете метод println для отображения в консоль простых значений или строк. Консольный ввод не поддерживается напрямую в Java, но вы можете использовать класс Scanner для создания объекта для чтения ввода из System.in. Это делается так:

Синтаксис new Scanner(System.in) создаёт объект типа Scanner. Синтаксис Scanner input объявляет, что input является переменной, чей тип – Scanner. Вся строка Scanner input = new Scanner(System.in) создаёт объект Scanner и присваивает его ссылку переменной input. Объект может вызывать свои методы. Вызвать метод объекта означает запросить объект выполнить задачу. Вы можете вызвать метод nextDouble() для чтения значения double следующим образом:

Инструкция считывает число с клавиатуры и присваивает это число переменной radius. Перепишем программу из предыдущего урока, чтобы она запрашивала радиус у пользователя:

Обратите внимание, что десятичным разделителем, в зависимости от локали вашей системы, может быть точка или запятая. Если у вас возникает ошибка InputMismatchException, то посмотрите чуть ниже.

Строка 10 отображает в консоли надпись «Введите радиус: ». Это называется prompt (подсказка, напоминание), поскольку он направляет пользователя к вводу данных. Если ваша программа ожидает ввода с клавиатуры, она всегда должна говорить пользователю, ввод каких данных от него ожидается.

Читать еще:  Ошибка цифровой подписи

print или println

Метод print на десятой строке

идентичен методу println с той лишь разницей, что println переходит к началу новой строки после отображения строки, а print после вывода не переходит к следующей строке.

Строка 8 создаёт объект Scanner. Инструкция на одиннадцатой строке считывает ввод с клавиатуры.

После того, как пользователь ввёл число и нажал клавишу Ввод (Enter), программа считывает число и присваивает его переменной radius.

Больше подробностей об объектах будет представлено в одной из последующих главах. На текущий момент просто примите, что это то, как получить вход с консоли.

Конкретный импорт

Класс Scanner находится в пакете java.util. Он импортируется на строке 2. Имеется два вида инструкций import: конкретный импорт и импорт с подстановочными символами. Конкретный импорт импортирует определённый единичный класс в инструкции import. Например, следующая инструкция импортирует Scanner из пакета java.util.

Импорт с подстановочным символом

Импорт с подстановочным символом импортирует все классы из пакета, используя звёздочку в качестве подстановочного символа. Например, следующая инструкция импортирует все классы из пакета java.util.

Разница в производительности между импортом одного класса или всех классов в пакете

Информация для классов из импортируемого пакета не считывается во время компиляции или во время выполнения если класс в программе не используется. Инструкция import просто говорит компьютеру, где расположен класс. Нет разницы в производительности между конкретным импортом или импортом с подстановочным символом.

Ещё одна программа, которая даёт пример чтения нескольких значений с клавиатуры. Программа считывает три числа и показывает их среднее арифметическое:

Листинг с номерами строк:

Код для импорта класса Scanner (строка 2) и создание объекта Scanner (строка 8) такие же, как и в предшествующем примере, как и во всех новых программах, которые вы будете писать, для чтения ввода с клавиатуры.

Строка 10 делает запрос пользователю ввести три числа. Числа считываются на строках 11-13. Вы можете ввести три числа разделив их пробелами, а затем нажать кнопку Enter, или нажимать клавишу Enter после каждого числа. Оба варианта показаны в примерах запуска этой программы.

Если вы введёте что-либо кроме числа, то произойдёт ошибка во время выполнения. В одной из последующих глав вы научитесь как обрабатывать ошибки, чтобы программа могла продолжать работать.

Примечание: большинство программа в начальных главах этого сайта выполняют три шага – ввод, обработка и вывод, это также называется IPO (от английских input, process, and output). Ввод – это получение данных от пользователя; обработка – это выработка результата, используя ввод, а вывод – это отображение результатов.

Решение проблемы с ошибкой InputMismatchException

Если при попытке ввести число с плавающей точкой, например, такой строкой программы:

Вы получаете ошибку:

Это означает, что локаль* вашей системы в качестве десятичного разделителя ожидает не точку, а запятую (или наоборот).

*Региональный стандарт, региональные настройки (проф. жарг. лока́ль от англ. locale, /lɔ.kal/ или /ləuˈkɑ:l/) — набор параметров, определяющий региональные настройки пользовательского интерфейса, такие как язык, страна, часовой пояс, набор символов и т. п.

Выходов из этой ситуации два:

  • использовать десятичный разделитель вашей локали (точку вместо запятой или запятую вместо точки)
  • чуть изменить программу – явно указать локаль

Для этого при создании объекта Scanner добавьте .useLocale(Locale.US). Например, объект создавался следующим образом:

После дополнения получается такая строка создания объекта:

Также в начале программы требуется сделать дополнительный импорт:

К примеру, код программы из этого параграфа, чтобы она начала принимать числа, у которых десятичным разделителем является точка, становится таким:

Ссылка на основную публикацию
Adblock
detector