Почему, когда у меня есть "valid = true;"под Сколько вы хотите заказать, в режиме отладки он работает код, но не работает? - PullRequest
0 голосов
/ 04 июля 2019

Но если я поставлю это в "valid = false;" он не работает в режиме отладки или запуска.

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

Я что-то упустил? После того, как вы спросили «сколько вы хотите заказать», и после этого вы должны указать число «хотите ли вы заказать что-нибудь еще», что делает, но тогда я не могу набрать и выйти из цикла do while. Все остальное работает до этого момента.

do {


boolean itemValid = true;
    while (itemValid) {

    System.out.println("Please enter an item name: ");

    String enterItem = scnr.nextLine();


        if (keepTrack.containsKey(enterItem)) {

             System.out.println(keepTrack.get(enterItem));
             itemValid = false;

        } else {
             System.out.println("Sorry we don't exist.");
             continue;

        }


           System.out.println("How many do you want to order?");
           int enterQuan = scnr.nextInt();
           yourOrder = enterQuan;
           valid = false;

            }

           System.out.println("Do you want to order anything else?");
           String yesNo = scnr.nextLine();

             if (yesNo.equalsIgnoreCase("n")) {
                 valid = false;
           } else
                break;

} while (valid);

1 Ответ

0 голосов
/ 04 июля 2019

Две проблемы с вашим кодом.Во-первых, вероятно, еще незамеченным:

 do ...

 if (keepTrack.containsKey(enterItem)) {
         System.out.println(keepTrack.get(enterItem));
         itemValid = false;
    } else {
         System.out.println("Sorry we don't exist.");
         continue;
    }

Когда ваш ввод "недействителен", вы превращаетесь в ветку else .Ветвь else продолжает цикл.Цикл зависит от value.Таким образом: как только вы начнете со значения = true, а затем получите неверный вход, вы получите бесконечный цикл.Потому что ничто между началом цикла и оператором continue никогда не изменит условий, которые могли бы завершить цикл.

Ваш актуальный вопрос: когда вы вызываете int enterQuan = scnr.nextInt(), который не потребляет«ENTER», что вы набрали на консоли.Подробнее см. здесь .

И есть еще одна проблема:

if (yesNo.equalsIgnoreCase ("n")) {valid = false;} еще перерыв;}

Когда пользователь вводит n или N, вы идете valid=false, который завершает внешний цикл do-while.Таким образом: когда пользователь вводит что-либо еще, берется путь else .Что можно найти в другом пути?A перерыв .Который также завершает цикл do-while.

Другими словами: ваш код делает именно то, что вы сказали ему: завершить цикл do-while, так или иначе.

Реальный ответ таков: вам нужно бытьгораздо осторожнее, что вы вкладываете в свой код.Каждый персонаж имеет значение.И когда вы добавляете что-то в свой код для эксперимента: помните, что оно есть и имеет эффекты.

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