import java.util.ArrayList;
import java.util.Scanner;
class SteppingStone4_Loops {
public static void main(String[] args) {
Scanner scnr = new Scanner(System.in);
String recipeName = "";
ArrayList<String> ingredientList = new ArrayList();
String newIngredient = "";
boolean addMoreIngredients = true;
System.out.println("Please enter the recipe name: ");
recipeName = scnr.nextLine();
do {
System.out.println("Would you like to enter an ingredient: (y or n)");
String reply = scnr.next().toLowerCase();
/**The code should check the reply:
* "y" --> prompt for the ingredient and add it to the ingredient list;
* "n" --> break out of the loop;
* anything else --> prompt for a "y" or "n"
*/
while (true) {
if (reply.equals("y")) {
System.out.println("Enter ingredient name: ");
newIngredient = scnr.next();
ingredientList.add(newIngredient);
break;
}
else if (reply.equals("n")) {
System.out.println("Goodbye!");
break;
}
else
break;
}
} while (addMoreIngredients);
for (int i = 0; i < ingredientList.size(); i++) {
String ingredient = ingredientList.get(i);
System.out.println(ingredient);
}
}
}
运行时,程序返回:
请输入食谱名称:
玉米粥
你想输入一种成分:(y或n)
ÿ
输入成分名称:
盐
你想输入一种成分:(y或n)
ñ
你想输入一种成分:(y或n)
5
你想输入一种成分:(y或n)
为什么在回复= n时它没有中断?为什么它会回到&#34;你想要输入一种成分&#34;?有人可以查明我的错误或者建议采用不同的方式吗?感谢
答案 0 :(得分:1)
请注意,您有2个while
循环
else if (reply.equals("n")) {
System.out.println("Goodbye!");
break;
}
上述条件将从内部while循环中断开,而while循环仍将继续,这就是为什么你得到输出“你想输入一个成分”,这是外循环的一部分。
因为,在外部循环中,您具有以下条件,即true
并且似乎永远不会更改。
while (addMoreIngredients)
因此,在离开内循环之前,您可以将addMoreIngredients
更改为false
else if (reply.equals("n")) {
System.out.println("Goodbye!");
addMoreIngredients = false;
break;
}
只是为了让您知道,您也可以使用标签中断。
答案 1 :(得分:0)
while (addMoreIngredients);
此行始终返回true。所以你的do循环继续循环。
我建议在内圈中为外圈设置一个标志。
- 编辑----- 让我们摆脱内循环,我认为它应该工作正常。 PS:现在我无法访问JRE。但我认为它应该有效
do {
System.out.println("Would you like to enter an ingredient: (y or n)");
String reply = scnr.next().toLowerCase();
if (reply.equals("y")) {
System.out.println("Enter ingredient name: ");
newIngredient = scnr.next();
ingredientList.add(newIngredient);
continue;
}
else if (reply.equals("n")) {
System.out.println("Goodbye!");
break;
}
else {
System.out.println("Invalid option!");
continue;
}
} while (addMoreIngredients);
答案 2 :(得分:0)
请检查你是否在内循环中有嵌套循环和break语句只是从内循环中断出来并且你应用了do-while循环的第二个条件
addMoreIngredients = true
破坏陈述只会打破内循环。
因此始终会运行,因为
addMoreIngredients
始终为真。
答案 3 :(得分:0)
make addMoreIngredients为false
else if (reply.equals("n")) {
System.out.println("Goodbye!");
addMoreIngredients = false;
break;
}