用逗号运算符做 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 ( , ) ,这可能吗?的主要内容,如果未能解决你的问题,请参考以下文章

逗号运算符do while循环嵌套循环数组简介

逗号运算符如何工作

sql server里如何将一组用逗号分隔的字符串分解并插入到另一张表中,比如:11873,27827, 也可能是好多

逗号运算符

C中的fscanf - 如何确定逗号?

循环的简单了解