Аватар для alicesmagic
233 / 130 / 27
Регистрация: 24.08.2016
Сообщений: 875

Ввод int в консоли. Как лучше?

09.09.2019, 16:25. Показов 4731. Ответов 23
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Вот никак не могу понять, как сделать простой ввод целых чисел в таком цикле:
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
public class ScanInteger {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        int userInput;
        while (true) {
            System.out.println("Введите число в диапазоне int: ");
            if (in.hasNextInt()) {
                userInput = in.nextInt();
                break;
            }
        }
        System.out.println("Введено число: " + userInput);
    }
}
При вводе целого числа все проходит успешно, а при вводе чего-нибудь другого программа зацикливается. Не происходит остановка для нового ввода.

Помещаем сканер внутрь цикла и все работает нормально:
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
public class ScanInteger {
    public static void main(String[] args) {
        int userInput;
        while (true) {
            Scanner in = new Scanner(System.in);
            System.out.println("Введите число в диапазоне int: ");
            if (in.hasNextInt()) {
                userInput = in.nextInt();
                break;
            }
        }
        System.out.println("Введено число: " + userInput);
    }
}
Но новый сканер на каждой итерации ввода это, наверное, не очень хорошо?
...
Тут, не так давно, кто-то (кажется это был easybudda) выкладывал код, реализующий подобный ввод. Мне он так понравился, но я забыла его сохранить, а теперь не могу найти. Подскажите, пожалуйста, как лучше решить эту задачу?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
09.09.2019, 16:25
Ответы с готовыми решениями:

Как запретить ввод в консоли
как запретить ввод в консоли. например: Сервер ждет пока клиент сообщит ему какую нибудь информацию, в данном случае строку, но в это...

Как лучше организовать ввод с клавиатуры?
здравствуйте что лучше для ввода с клавы класс Sccanner или этот код BufferedReader reader = new BufferedReader(new...

Чтение с консоли в int - переменную в JAVA
Необходимо записать в переменную типа int число считанное с консоли. В этом и есть задача.

23
 Аватар для alicesmagic
233 / 130 / 27
Регистрация: 24.08.2016
Сообщений: 875
10.09.2019, 14:35  [ТС]
Студворк — интернет-сервис помощи студентам

Не по теме:

Экспрессия = извращение? Ну, это интересная точка зрения. Наверное, я даже соглашусь с ней)))
Однако, четкая и недвусмысленная формулировка задачи - залог успеха. А формулировка "Введите число в диапазоне int: 15 - 125" - это нечетко и двусмысленно. Кто-то может ввести "-110" (что вполне можно считать правильным вводом, исходя из такого задания) и получить порцию незаслуженного негатива от вашей программы.



Добавлено через 7 минут
Вообще, вот такой код, работает вполне корректно. Тоже со всеми проверками:

Кликните здесь для просмотра всего текста
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
import java.util.Scanner;
 
public class GetInt {
    public static int scanInt() {
        Scanner in = new Scanner(System.in);
        int userInput, a = 1, b = Integer.MAX_VALUE;
        while (true) {
            System.out.println("Введите целое "
                    + "число в диапазоне [" + a + " .. " + b + "]: ");
            if (in.hasNextInt()) {
                userInput = in.nextInt();
                if (userInput >= a && userInput <= b) break;
                else
                    System.out.println("Не соответствует условиям ввода!");
            } else {
                System.out.println("Не соответствует условиям ввода!");
                in.nextLine();
            }
        }
        in.close();
        System.out.println("Введено число: " + userInput);
        return userInput;
    }
 
    public static void main(String[] args) {
        int x = scanInt();
    }
}
Code
1
2
3
4
5
6
7
8
9
10
11
12
Введите целое число в диапазоне [1 .. 2147483647]: 
dfgs
Не соответствует условиям ввода!
Введите целое число в диапазоне [1 .. 2147483647]: 
-98
Не соответствует условиям ввода!
Введите целое число в диапазоне [1 .. 2147483647]: 
3000000000
Не соответствует условиям ввода!
Введите целое число в диапазоне [1 .. 2147483647]: 
434
Введено число: 434
1
 Аватар для InvalidCode
295 / 471 / 86
Регистрация: 26.02.2018
Сообщений: 931
Записей в блоге: 2
10.09.2019, 14:51
alicesmagic, Так я ж не спорю, просто нечем было заняться на работе. сегодня рабочий выходной - начальство уехало - нам лафа, никто на мозга не капает, вот можно и фигней занятся
1
 Аватар для alicesmagic
233 / 130 / 27
Регистрация: 24.08.2016
Сообщений: 875
10.09.2019, 15:00  [ТС]
Цитата Сообщение от alecss131 Посмотреть сообщение
Как лучше всего считать строку из консоли? Мне нужно именно строку, потом буду использовать метод equals от введенного.
Так вы же ее считали в своем коде. in = scanner.nextLine()

Добавлено через 2 минуты
InvalidCode, да мне только "извращения" не понравились, а вообще код классный. Беру на вооружение))) Спасибо!
0
10.09.2019, 15:01

Не по теме:

Цитата Сообщение от InvalidCode Посмотреть сообщение
начальство уехало - нам лафа
Добросовестный рабочий :D

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
10.09.2019, 15:01
Помогаю со студенческими работами здесь

Ввод с консоли
Подскажите пожалуйста, как в java лучше реализовать ввод с консоли? Заранее спасибо!)

Ввод с консоли
Всем привет. Изобрел &quot;велосипед&quot; для ввода с консоли public static String read() throws IOException { char ch; ...

Ввод с консоли
Привет всем) Я новичок, столкнулся с тем что написать ввод с консоли очень большая проблема. Вот код который я нашел тут же на форуме ...

Ввод данных с консоли
Добрый день! Такой вопрос - какой лучше метод использовать для ввода данных с консоли, которые потом принимаются на вход методу для...

Ввод данных с консоли
Здравствуйте, уважаемые форумчане! Возникла такая проблема. У меня имелся такой метод: private void coin() throws InterruptedException...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
24
Ответ Создать тему
Опции темы

Новые блоги и статьи
Асинхронный приём данных из COM-порта
Argus19 01.05.2026
Асинхронный приём данных из COM-порта Купил на aliexpress термопринтер QR701. Он оказался странным. Поключил к Arduino Nano. Был очень удивлён. Наотрез отказывается печатать русские буквы. Чтобы. . .
попытка написать игровой сервер на C++
pyirrlicht 29.04.2026
попытка написать игровой сервер на плюсах с открытым бесконечным миром. возможно получится прикрутить интерпретатор питон для кастомизации игровой логики. что есть на текущий момент:. . .
Контроль уникальности выбранного документа-основания при изменении реквизита
Maks 28.04.2026
Алгоритм из решения ниже разработан на примере нетипового документа "ЗаявкаНаРемонтСпецтехники", разработанного в КА2. Задача: уведомлять пользователя, если указанная заявка (документ-основание). . .
Благородство как наказание
Maks 24.04.2026
У хорошего человека отношения с женщинами всегда складываются трудно. А я человек хороший. Заявляю без тени смущения, потому что гордиться тут нечем. От хорошего человека ждут соответствующего. . .
Валидация и контроль данных табличной части документа перед записью
Maks 22.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в КА2. Задача: контроль и валидация данных табличной части документа перед записью с учетом регламента компании. . .
Отчёт о затраченных материалах за определенный период с макетом печатной формы
Maks 21.04.2026
Отчёт из решения ниже размещён в конфигурации КА2. Задача: разработка отчёта по затраченным материалам за определённый период, с возможностью вывода печатной формы отчёта с шапкой и подвалом. В. . .
Отчёт о спецтехнике находящейся в ремонте
Maks 20.04.2026
Отчёт из решения ниже размещен в конфигурации КА2. Задача: отобразить спецтехнику, которая на данный момент находится в ремонте. Есть нетиповой документ "Заявка на ремонт спецтехники" который. . .
Памятка для бота и "визитка" для читателей "Semantic Universe Layer (Слой семантической вселенной)"
Hrethgir 19.04.2026
Сгенерировано для краткого описания по случаю сборки и компиляции скелета серверного приложения. И пусть после этого скажут, что статьи сгенерированные AI - туфта и не интересно. И это не реклама -. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru