Форум программистов, компьютерный форум, киберфорум
Java SE (J2SE)
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.90/21: Рейтинг темы: голосов - 21, средняя оценка - 4.90
 Аватар для alicesmagic
233 / 130 / 27
Регистрация: 24.08.2016
Сообщений: 875

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

09.09.2019, 16:25. Показов 4705. Ответов 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 / 470 / 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
Ответ Создать тему
Новые блоги и статьи
Фото всей Земли с борта корабля Orion миссии Artemis II
kumehtar 04.04.2026
Это первое подобное фото сделанное человеком за 50 лет. Снимок называют новым вариантом легендарной фотографии «The Blue Marble» 1972 года, сделанной с борта корабля «Аполлон-17». Новое фото. . .
Вывод диалогового окна перед закрытием, если документ не проведён
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: реализовать программный контроль на предмет проведения документа. . .
Программный контроль заполнения реквизита табличной части документа
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: реализовать контроль заполнения реквизита "ПричинаСписания". . .
wmic не является внутренней или внешней командой
Maks 02.04.2026
Решение: DISM / Online / Add-Capability / CapabilityName:WMIC~~~~ Отсюда: https:/ / winitpro. ru/ index. php/ 2025/ 02/ 14/ komanda-wmic-ne-naydena/
Программная установка даты и запрет ее изменения
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: при создании документов установить период списания автоматически. . .
Вывод данных в справочнике через динамический список
Maks 01.04.2026
Реализация из решения ниже выполнена на примере нетипового справочника "Спецтехника" разработанного в конфигурации КА2. Задача: вывести данные из ТЧ нетипового документа. . .
Программное заполнения текстового поля в реквизите формы документа
Maks 01.04.2026
Алгоритм из решения ниже реализован на нетиповом документе "ВыдачаОборудованияНаСпецтехнику" разработанного в конфигурации КА2, в дополнении к предыдущему решению. На форме документа создается. . .
К слову об оптимизации
kumehtar 01.04.2026
Вспоминаю начало 2000-х, университет, когда я писал на Delphi. Тогда среди программистов на форумах активно обсуждали аккуратную работу с памятью: нужно было следить за переменными, вовремя. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru