Как сделать проверку на ввод числа в java

Обновлено: 06.07.2024

Этот материал будет полезен, прежде всего, начинающим Java-разработчикам. Мы поговорим о вводе данных на консоль и о том, зачем нужен класс Scanner.

Как правило, вывод данных на консоль в Java не представляет сложности. Обычно для этого используют System.out.print либо System.out.println. Но если дело доходит до ввода, то тут иногда возникают трудности. Они связаны с тем, что реализация консольного ввода в Java считается некоторыми специалистами достаточно сложной и неудобной. Однако освоить её и изучить работу сканера (Scanner) не составит труда.

Как вы уже поняли, работа эта строится с помощью класса Scanner. Кроме сканера, для ввода в Java можно использовать и класс InputStream (System.in) — о нём поговорим в первую очередь.

Ввод с помощью InputStream (System.in)

Java получает данные из консоли посредством системного потока ввода (Isystem.in), а значит, такой способ ввода кажется очевидным. Но у него есть недостаток. Связан он с тем, что системный поток получает лишь числовые коды символов, введённые в окно консоли. При этом за раз из этого потока можно прочитать только код одного символа. В результате для чтения строки или слова потребуется применение цикла.

Посмотрите пример считывания строки, введённой в консоли Java:

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

Но неудобства в Java на этом не заканчиваются, ведь мы постоянно получаем данные в строковом формате. А если потребуется ввести целое число, нам придётся дополнить наш код приведением типов и соответствующей проверкой.

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

Ввод с помощью Scanner

Класс Scanner исключает трудности, связанные с применением системного потока ввода, плюс максимально упрощает ввод данных от пользователя в консоль Java. Мало того, чтение данных из консоли через сканер — это не единственная возможность Scanner, но это уже отдельная история.

Итак, экземпляр класса Scanner в Java создаётся посредством конструктора, принимающего поток ввода в качестве единственного параметра. Далее можно сразу же считывать готовые данные, используя семейство методов с префиксом next.

Продемонстрируем считывание строки, введённой в консоли Java. С помощью Scanner в конструктор осуществляется передача системного потока ввода.

Сравнивая последний пример с вышеприведённым (с прямым считыванием String), мы уверенно скажем, что преимущество Scanner очевидно. Смотрите, благодаря Scanner нам не нужно вручную считывать коды символов, формируя строку в цикле. Scanner сам выполняет рутинные низкоуровневые функции, а потом предоставляет данные, готовые к использованию в программе.

Как мы уже говорили, класс Scanner в Java включает в себя целый ряд методов, используемых для считывания данных. Они отличаются названиями и типами возвращаемых значений: — nextLine, — nextBoolean, — nextInt, — nextDouble, — nextByte и прочие.

Также в классе Scanner выделяют методы с префиксом hasNext, позволяющие определять тип считываемых данных (hasNextLine, hasNextInt, hasNextBollean и т. п.). А если в потоке ввода есть данные соответствующего типа, данные методы возвратят true.

Таким образом в Java обеспечивается безопасность получения данных по отношению к несоответствию типов.

Что ж, ввести данные в консоль Java не так уж и сложно, особенно, если вы используете Scanner. На этом пока всё, следите за новостями!

Я делаю простую программу, которая просит пользователя ввести пять чисел между 0-19. Я хотел бы добавить что-то (например, оператор if) после каждого номера, чтобы убедиться, что он находится в этом диапазоне. Если нет, программа должна сказать "пожалуйста, прочитайте инструкцию еще раз", а затем System.exit(0). Это часть кода, которая имеет значение:

Любая помощь будет принята с благодарностью.

Прежде всего, я бы создал цикл for, который повторяет N раз, причем N - это число чисел, которое вы хотите запросить (в вашем случае 5). Представьте свой пример с 50 номерами; это было бы очень повторяемо.

Затем, когда вы получаете каждый номер с помощью scan.nextInt() в своем for-loop, вы можете проверить, как вы хотите:

Кроме того, вместо того, чтобы просто выходить, когда они вводят число за пределами диапазона, вы можете использовать свою логику внутри цикла while, чтобы она запрашивала их для чисел. Таким образом, пользователю не нужно перезапускать приложение. Что-то вроде:

Затем установите runApplication при необходимости, исходя из того, помещен ли пользователь в действительные числа.

Этот код сделает трюк для вас, я добавил некоторые ценные бумаги:

Вы можете поместить это после каждого из ваших входов, но вы можете подумать о том, чтобы поместить эту логику в свой собственный метод, затем вы можете повторно использовать код и просто называть его чем-то вроде validateInput(userNum1); ,

Замените val своими фактическими именами переменных.

Поскольку вы уже знаете, сколько цифр вы хотите ввести пользователю, я предлагаю вам использовать цикл for. Это делает ваш код более элегантным, и вы можете добавить столько записей, сколько хотите, изменив конечное условие цикла. Единственная причина, по которой он выглядит долго, состоит в том, что число 1, 2, 3 заканчивается в другом формате, т.е. FirST secoND thiRD, но остальные номера заканчиваются на TH. Вот почему мне пришлось реализовать некоторые if else-выражения внутри цикла.

Scanner Vertex Academy

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

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

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

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

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

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

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

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

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

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

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

Решение:

Если Вы попробуете запустить этот код на своём компьютере, то в консоли Вы увидите следующее:

Введите любое целое число от 1 до 10:

Затем, если Вы, например, введёте число 5, то в консоли будет следующее:

Введите любое целое число от 1 до 10: 5
Вы ввели число 5

Комментарии:

В статье "Что такое библиотека Java?" мы с Вами разобрались, что в Java есть огромная библиотека протестированного кода - это уже готовые решения ко многим задачам, которые стоят перед программистами в их ежедневной работе . Также мы говорили о различных пакетах, классах и методах. Так вот, сейчас мы будем с Вами работать с пакетом java.util. В этом пакете есть класс Scanner. И у него есть методы (действия), которые позволяют работать с вводом и выводом информации в консоль.

Сканер в Java

Но чтобы мы смогли использовать в нашем коде класс Scanner, нам необходимо сделать 3 шага.

Шаг №1 - обязательно прописать вот такую строчку в коде

В этом уроке мы рассмотрим примеры того, как проверить, представляет ли строка число в Java. Мы будем использовать основную Java и библиотеку Apache Commons, а также регулярные выражения.

Вступление

Строки-это удобный способ передачи информации и получения входных данных от пользователя.

В этой статье мы рассмотрим несколько способов проверить, является ли строка числовой в Java – то есть, представляет ли строка числовое значение.

Проверьте, является ли строка числовой с помощью ядра Java

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

Самый простой способ проверить, является ли строка числовой или нет,-это использовать один из следующих встроенных методов Java:

  1. Целое число.Синтаксический анализ()
  2. Целое число.valueOf()
  3. Double.Парседубль()
  4. Поплавок.парсеФлоат()
  5. Длинный.парсеЛонг()

Эти методы преобразуют заданную строку в ее числовой эквивалент. Если они не могут преобразовать его, создается исключение NumberFormatException , указывающее, что строка не была числовой.

Стоит отметить , что Integer.valueOf() возвращает новое целое число () , в то время как Integer.parseInt() возвращает примитив int . Имейте это в виду, если такая разница изменит ход вашей программы.

Давайте попробуем это:

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

Теперь мы можем просто позвонить:

Выполнение этого кода приведет к:

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

Проверьте, является ли строка числовой с помощью Apache Commons

Apache Commons является одной из наиболее часто используемых сторонних библиотек для расширения базовой платформы Java. Это дает нам более точный контроль над основными классами Java, в данном случае строками.

Мы рассмотрим два класса из библиотеки Apache Commons:

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

Давайте теперь посмотрим, как мы можем проверить числовые значения с помощью этих методов.

числа.Сопоставимо()

Этот метод принимает строку и проверяет, является ли это анализируемым числом или нет, мы можем использовать этот метод вместо того, чтобы перехватывать исключение при вызове одного из методов, о которых мы упоминали ранее.

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

Обратите внимание, что шестнадцатеричные числа и научные обозначения не считаются поддающимися анализу.

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

Git Essentials

Ознакомьтесь с этим практическим руководством по изучению Git, содержащим лучшие практики и принятые в отрасли стандарты. Прекратите гуглить команды Git и на самом деле изучите это!

Этот код должен возвращать:

NumberUtils.isCreatable()

Этот метод также принимает строку и проверяет, является ли она допустимым номером Java . С помощью этого метода мы можем охватить еще больше чисел, потому что допустимое число Java включает в себя четные шестнадцатеричные и восьмеричные числа, научную нотацию, а также числа, отмеченные классификатором типа.

Теперь мы можем даже использовать что-то вроде:

числа.isDigits()

Число .Метод isDigits() проверяет, содержит ли строка только Цифры в Юникоде. Если Строка содержит начальный знак или десятичную точку, метод вернет false :

StringUtils.IsNumeric()

StringUtils.IsNumeric() является StringUtils эквивалентом NumberUtils.isDigits() .

Если Строка проходит числовой тест, она все равно может вызвать исключение NumberFormatException при анализе методами, о которых мы упоминали ранее, например, если она находится вне диапазона для int или long .

Используя этот метод, мы можем определить, можем ли мы проанализировать Строку в Целое число :

StringUtils.isNumericSpace()

Кроме того, если мы ожидаем найти больше чисел в строке, мы можем использовать isNumericSpace , еще один полезный StringUtils метод, о котором стоит упомянуть. Он проверяет, содержит ли строка | только цифры Юникода или пробелы .

Давайте проверим строку, содержащую числа и пробелы:

Проверьте, является ли строка числовой с помощью регулярного выражения

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

И тогда мы можем вызвать этот метод:

Выполнение этого дает нам следующий результат:

Вывод

В этой статье мы рассмотрели несколько способов проверить, является ли строка числовой или нет (представляет собой число) в Java.

Мы начали использовать ядро Java и поймали исключение NumberFormatException , после чего мы использовали библиотеку Apache Commons. Оттуда мы использовали классы StringUtils и NumberUtils , чтобы проверить, является ли строка числовой или нет, в различных форматах.

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

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

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

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

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

Пока просто запомните

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

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

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

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

Читайте также: