2 回答
TA贡献1942条经验 获得超3个赞
for正如您在评论中要求的示例一样。
练习的重点似乎是在菜单上迭代,直到满足退出条件 ( "X".equals(input))。这意味着在for语句中的三个条件之间,这是您唯一需要指定的条件。这是因为(基本)for陈述的一般形式是
for ( [ForInit] ; [Expression] ; [ForUpdate] )
括号之间的这些术语都不是强制性的,因此我们也可以去掉[ForInit]and [ForUpdate](但保留分号)。这具有不初始化任何东西的效果,[ForInit]并且在循环的每次迭代结束时什么也不做[ForUpdate],让我们只检查表达式给出的退出条件[Expression](当它被评估为时false,循环退出)。
请注意,console是在循环外声明的,因为在每次迭代时都分配一个会很浪费。而且input,因为您在for声明的条件下需要它。
Scanner console = new Scanner(System.in);
String input = "";
for (;!"X".equals(input);) { // notice, the first and last part of the for loop are absent
displayMenu();
input = console.nextLine().toUpperCase();
System.out.println();
switch (input) {
case "A": System.out.println("Option #A was selected"); break;
case "B": System.out.println("Option #B was selected"); break;
case "C": System.out.println("Option #C was selected"); break;
case "D": System.out.println("Option #D was selected"); break;
case "X": System.out.println("You chose to Exit"); break;
default: System.out.println("Invalid selection made"); break;
}
}
您可能会注意到这有点尴尬,因为这不是您通常使用for循环的目的。
无论如何,在这一点上,while版本变得微不足道 ( while (!"X".equals(input))) 并且在这种情况下,do...while也是等效的, ( do { ... } while (!"X".equals(input))) 因为相同的条件适用于当前循环的末尾和下一个循环的开始,并且有它们之间没有副作用。
顺便说一句,您可能会注意到while (condition)和for (; condition ;)在功能上是等效的,并且您可能会想知道为什么应该使用一个而不是另一个。答案是可读性。做的时候想做什么就清楚多了while (condition)。
TA贡献1829条经验 获得超9个赞
for 循环中的所有参数都不是强制性的。定义一个停止标志并检查输入是否为“X”。每当输入是“X”时,只需更改 stopFlag 或只是简单地使用 break 语句来中断循环;
public void startFor()
{
boolean stopFlag = false;
for(; stopFlag == false ;) {
displayMenu();
Scanner console = new Scanner(System.in);
String input = console.nextLine().toUpperCase();
System.out.println();
switch (input)
{
case "A": System.out.println("Option #A was selected"); break;
case "B": System.out.println("Option #B was selected"); break;
case "C": System.out.println("Option #C was selected"); break;
case "D": System.out.println("Option #D was selected"); break;
case "X": System.out.println("You chose to Exit"); break;
default: System.out.println("Invalid selection made"); break;
}
if(input.contentEquals("X"))
stopFlag = true;
}
}
添加回答
举报