用逗号运算符做 while ( , ) ,这可能吗?
Posted
技术标签:
【中文标题】用逗号运算符做 while ( , ) ,这可能吗?【英文标题】:Do while ( , ) with comma operator, is that even possible?用逗号运算符做 while ( , ) ,这可能吗? 【发布时间】:2015-01-23 09:52:38 【问题描述】:昨天我读到了 Java 中用于 for 循环的逗号运算符。正如我所期望的那样工作。我想到了这种结构,但它没有按预期工作。
';' expected
while((userInput < 1 || userInput > 3), wrongInput = true);
';' expected
while((userInput < 1 || userInput > 3), wrongInput = true);
我的想法是,在一次迭代之后,如果 userInput
不在 1 和 3 之间,它应该将布尔值 wrongInput
设置为 true
,以便在下一次迭代期间显示错误消息。表示userInput
无效。
private int askUserToSelectDifficulty()
int userInput;
Boolean wrongInput = false;
do
if(wrongInput) println("\n\t Wrong input: possible selection 1, 2 or 3");
userInput = readInt();
while((userInput < 1 || userInput > 3), wrongInput = true);
return userInput;
我想这可能是因为这相当于 for 循环的条件部分,所以这是无效的语法。因为你不能在条件部分使用逗号运算符?
我在 for 循环中看到逗号运算符的示例:Giving multiple conditions in for loop in Java Java - comma operator outside for loop declaration
【问题讨论】:
看看java操作符-docs.oracle.com/javase/tutorial/java/nutsandbolts/… 这些昏迷示例被用于分配多个值但不是条件 @Joseph118 很高兴知道 , 正如 NPE 已经指出的那样,它根本不是 Java 中的运算符。它确实不在文档中。 【参考方案1】:最好稍微展开一下。
userInput = readInt();
while (userInput < 1 || userInput > 3)
System.out.println("\n\tWrong input: possible selection 1, 2 or 3");
userInput = readInt();
这避免了对标志的需要。
【讨论】:
【参考方案2】:Java 中没有逗号运算符(无论如何,在 C/C++ 意义上不是)。在某些上下文中,您可以使用逗号一次声明和初始化多个事物,但这并不能推广到其他上下文,例如您的示例中的上下文。
表达你的循环的一种方式是这样的:
while (true)
userInput = readInt();
if (userInput >= 1 && userInput <= 3)
break;
println("\n\t Wrong input: possible selection 1, 2 or 3");
;
【讨论】:
以上是关于用逗号运算符做 while ( , ) ,这可能吗?的主要内容,如果未能解决你的问题,请参考以下文章