Две проблемы с вашим кодом.Во-первых, вероятно, еще незамеченным:
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, так или иначе.
Реальный ответ таков: вам нужно бытьгораздо осторожнее, что вы вкладываете в свой код.Каждый персонаж имеет значение.И когда вы добавляете что-то в свой код для эксперимента: помните, что оно есть и имеет эффекты.