Форум программистов, компьютерный форум, киберфорум
Java SE (J2SE)
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/9: Рейтинг темы: голосов - 9, средняя оценка - 4.67
 Аватар для androidos
29 / 27 / 5
Регистрация: 07.07.2011
Сообщений: 782

Неправильно работает do-while (Scanner)

01.03.2019, 13:30. Показов 1915. Ответов 10
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день.
Использую Сканнер для ввода клавиатуры.
Хоу сделать так, чтобы мне предлагали ввести Город и Породу кошки, пока я не нажал 0.
То есть как-то так
-Введите город
-Введите породу

-Введите город
-Введите породу

и тд

Вот мой код, который не работает как надо. Можете подсказать что я делаю не так?
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
        System.out.println("Welcome to AnimalHospital");
        Scanner in = new Scanner(System.in);
        do {
            System.out.print("Input city: ");
            String catCity = in.nextLine();
            System.out.print("Input breed: ");
            String catBreed = in.nextLine();
 
            List<String> cats = new ArrayList<String>();
            cats.add(catCity);
            cats.add(catBreed);
            for (int i = 0; i < cats.size(); i++) {
                System.out.println(cats.get(i));
            }
 
        }
        while(in.nextLine().equals("0"));
        in.close();
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
01.03.2019, 13:30
Ответы с готовыми решениями:

Проверьте задачку по циклам, неправильно работает. [думаю что неправильно]
Спасибо что решили зайти. Задание выгладит так: http://*******/PW95p А результат выплнения: http://*******/KwhuS #include...

Scanner hasNextLine не работает
Добрый день. Написал стандартный код для сервера. Все подключается, сообщения клиенту отправляются, НО сообщения от клиента приходят только...

Неправильно работает цикл for, и функции работают неправильно
1) Неправильно работает цикл for(k=0...). Входит только 1 раз, дальше вылетает. Делал пошаговую отладку на проверку значения k. Выдаёт...

10
129 / 108 / 24
Регистрация: 11.07.2017
Сообщений: 274
01.03.2019, 13:59
Вот так будет норм работать
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
    public static void main(String[] args) {
        //checkAFlag(new D());
        System.out.println("Welcome to AnimalHospital");
        Scanner in = new Scanner(System.in);
        while (true){
            System.out.print("Input city: ");
            String catCity = in.nextLine();
            if (catCity.equals("0"))
                break;
            System.out.print("Input breed: ");
            String catBreed = in.nextLine();
 
            List<String> cats = new ArrayList<String>();
            cats.add(catCity);
            cats.add(catBreed);
            for (int i = 0; i < cats.size(); i++) {
                System.out.println(cats.get(i));
            }
        }
        in.close();
    }
Но учтите, что данные в ArrayList теряются каждый раз при вводе. Если хотите накопить все что вводилось - надо вынестиобъявление
Java
1
List<String> cats = new ArrayList<String>();
за пределы цикла

Добавлено через 4 минуты
Или можно оставить первый вариант, но изменить строку 17
Java
1
while(!in.nextLine().equals("0"));
Тогда будет требоваться чтото ввести, есло не "0", то продолжится цикл.
1
 Аватар для androidos
29 / 27 / 5
Регистрация: 07.07.2011
Сообщений: 782
01.03.2019, 14:37  [ТС]
Цитата Сообщение от rvs_dk Посмотреть сообщение
Тогда будет требоваться чтото ввести, есло не "0", то продолжится цикл.
Спасибо, я так и сделал - заработало.
А объясните, пожалуйста, мою логику. Почему она неправильная.

Делаем ВВОД С КЛАВИУТЫРЫ
Пока(следующий_ввод_равен = 0)

а вы пишите

Пока(следующий_ввод_НЕ_равен = 0)

Или я что-то не так понимаю?
0
129 / 108 / 24
Регистрация: 11.07.2017
Сообщений: 274
01.03.2019, 15:31
У вас получается продолжать пока "0". Т.е. ввели 0 продолжаем цикл, любое другое отличное от 0 - завершаем.
2
01.03.2019, 17:12

Не по теме:

Цитата Сообщение от androidos Посмотреть сообщение
мне предлагали ввести Город и Породу кошки
теперь я пожалуй видел все... ЗАЧЕМ???

0
 Аватар для androidos
29 / 27 / 5
Регистрация: 07.07.2011
Сообщений: 782
01.03.2019, 22:13  [ТС]
Цитата Сообщение от rvs_dk Посмотреть сообщение
У вас получается продолжать пока "0". Т.е. ввели 0 продолжаем цикл, любое другое отличное от 0 - завершаем.
Понял. Подскажите пожалуйста, почему еще в этом моменте вылетает эксепшн, если я нажимаю X.
Я же делаю проверку, что делать, пока не нажата строка X....или нет?
Мой код
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
        do {
            System.out.println("Enter the number > 0:");
            int value = in2.nextInt();
            int flowerCount = 1;
 
            if(value <= 0){
                System.out.println("Value is incorrect. Stop.");
            }
            else if(value == 1){
                System.out.println("Flower count: 1");
 
            }
            else{
                flowerCount = value + (value - 1); // 0 +
                System.out.println("Flower count: " + flowerCount);
 
            }
 
        }
        while(!in2.nextLine().equals("x"));
Exception in thread "main" java.util.InputMismatchException
0
Эксперт PythonЭксперт Java
19530 / 11067 / 2931
Регистрация: 21.10.2017
Сообщений: 23,294
01.03.2019, 22:19
Цитата Сообщение от androidos Посмотреть сообщение
почему
потому что вот это in2.nextInt(); пытается получить инт, а ты ему подсовываешь х...
0
 Аватар для androidos
29 / 27 / 5
Регистрация: 07.07.2011
Сообщений: 782
01.03.2019, 23:48  [ТС]
Цитата Сообщение от iSmokeJC Посмотреть сообщение
потому что вот это in2.nextInt(); пытается получить инт, а ты ему подсовываешь х...
но мне просто нужен был ввод цифры, а не строки, поэтому я взял nextInt.
Какое решение моей проблемы?
Взять nextLine? Но как я тогда смогу сравнить nextLine с числом, напимер делая проверку <0?
Я только изучаю Java Core.

Добавлено через 5 минут
Цитата Сообщение от iSmokeJC Посмотреть сообщение
потому что вот это in2.nextInt(); пытается получить инт, а ты ему подсовываешь х...
Попробовал вот так сделать, но программа работает некорректно

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
        Scanner in2 = new Scanner(System.in);
 
        do {
            System.out.println("Enter the number > 0:");
 
            int value = in2.nextInt();
            int flowerCount = 1;
 
            if(value <= 0){
                System.out.println("Value is incorrect. Stop.");
            }
            else if(value == 1){
                System.out.println("Flower count: 1");
 
            }
            else{
                flowerCount = value + (value - 1); // 0 +
                System.out.println("Flower count: " + flowerCount);
 
            }
            System.out.println("Enter -1 for exit");
        }
        while(in2.nextInt() != -1);
        in2.close();
Добавлено через 10 минут
Цитата Сообщение от iSmokeJC Посмотреть сообщение
потому что вот это in2.nextInt(); пытается получить инт, а ты ему подсовываешь х...
Решил одну проблему роботом, но теперь у меня не вылетает программа, если я ввожу -1
не пойму почему
вот полный код

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
29
30
31
32
33
34
        Scanner in2 = new Scanner(System.in);
 
        do {
            System.out.println("Enter the number > 0:");
 
            int value = in2.nextInt();
            int flowerCount = 1;
 
            if(value <= 0){
                System.out.println("Value is incorrect. Stop.");
            }
            else if(value == 1){
                System.out.println("Flower count: 1");
 
            }
            else{
                flowerCount = value + (value - 1); // 0 +
                System.out.println("Flower count: " + flowerCount);
 
            }
 
            Robot r = new Robot();
            r.keyPress(KeyEvent.VK_1);
            r.keyRelease(KeyEvent.VK_1);
            r.keyPress(KeyEvent.VK_ENTER);
            r.keyRelease(KeyEvent.VK_ENTER);
 
            System.out.println("Enter -1 for exit");
 
 
        }
        while(in2.nextInt() != -1);
 
        in2.close();
0
129 / 108 / 24
Регистрация: 11.07.2017
Сообщений: 274
02.03.2019, 00:17
Как то все замудрено у вас. Проще сделать бесконечный цикл и проверять если введено нечто ужасное, то выходить
0
 Аватар для androidos
29 / 27 / 5
Регистрация: 07.07.2011
Сообщений: 782
02.03.2019, 00:18  [ТС]
Цитата Сообщение от rvs_dk Посмотреть сообщение
Как то все замудрено у вас. Проще сделать бесконечный цикл и проверять если введено нечто ужасное, то выходить
1) Если покажете как - буду признателен
2) Хотелось бы также понять, почему мой вариант не работает.
Ведь вот это по идее правильно
Java
1
while(in2.nextInt() != -1);
0
129 / 108 / 24
Регистрация: 11.07.2017
Сообщений: 274
02.03.2019, 00:36
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
while (true){
            System.out.println("Enter the number > 0:");
            String value = in2.nextLine();
            if (value.equals("x")) {
                break;
            }
            int intvalue=Integer.parseInt(value);
 
            int flowerCount = 1;
 
            if(intvalue <= 0){
                System.out.println("Value is incorrect. Stop.");
            }
            else if(intvalue == 1){
                System.out.println("Flower count: 1");
            }
            else{
                flowerCount = intvalue + (intvalue - 1); // 0 +
                System.out.println("Flower count: " + flowerCount);
            }
        }
Добавлено через 2 минуты
Здесь в бесконечном цикле принимается строка, если она окажется = х, то выходим из цикла, иначе приводим к целочисленному и работаем далее
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
02.03.2019, 00:36
Помогаю со студенческими работами здесь

Scanner в Java (scanner.nextLine()
Добрые люди, есть код, который при одном itemName = scanner.nextLine(); не останавливается чтобы я мог вписать имя - сразу кидает на...

Цикл работает неправильно, в то время как POST работает
Всем привет! Я хотел написать под php скрипт с авторизацией, брут, на своем сайте(подбор пароля). Написал код на загрузку словаря +...

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

Неправильно работает do while
Цикл по И &lt;?php $a=0; $b=0; while ($a&lt;10 &amp;&amp; $b&lt;10) { $a=$a+1; $b=$b+2; echo &quot;a= &quot;.$a.&quot; b= &quot;.$b.&quot;...

Неправильно работает
Дан массив строк.Из второй половины каждой строки удалить'.' const n=3; Type TInd=1..n; Tar=arrayof string; var...


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
Установка Emscripten SDK (emsdk) и CMake на Windows для сборки C и C++ приложений в WebAssembly (Wasm)
8Observer8 30.01.2026
Чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. Система контроля версиями Git. . .
Подключение Box2D v3 к SDL3 для Android: физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL3_image
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
Влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru