Java 可以把这两行写成三元运算符吗?

Java 可以把这两行写成三元运算符吗?,java,if-statement,ternary-operator,Java,If Statement,Ternary Operator,例如: if (i < n) i++; else j += 2; if(i

例如:

if (i < n) 
    i++;
else 
   j += 2;
if(i
我做到了:

i += i < n ? 1 : j += 2; 
i+=i
(但编译器显示错误)

如果可能的话,我怎么能把这些行写成三元运算符呢。。 谢谢…

(它是“条件”操作符。它是一个三元操作符,现在Java是唯一的一个,但是…)

由于您并不总是更改
i
的值,而且Java不允许将任意表达式作为独立语句(与其他一些语言一样,如JavaScript、do),除非给自己一个
nop
方法或其他东西,以便可以在表达式上下文中使用条件,否则不能使用条件运算符重写这些。或者做一些真正令人费解的事情

也没有理由这么做<代码>如果
非常清楚

但如果你想,考虑到:

private static void nop(int n) {
}
然后

nop(i
还有一种非常复杂的方式:

i = i < n ? i + 1 : (j = j + 2) == j ? i : 0;
i=i
…如果
i
为false,则只将
i
分配回自身,因为我们知道
(j=j+2)==j
将为
true


但同样:没有理由。

条件运算符
(或三元运算符)被设计为给单个变量赋值。

以这种方式记录此操作:

此运算符也称为三元运算符,因为它使用 三个操作数。在以下示例中,应读取此运算符 as:“如果someCondition为true,则将value1的值指定给结果。 否则,将值2的值指定给结果。“

因此,不能直接使用三元运算符将结果分配给
j
i


正如T.J.Crowder所示,您可以使用一种复杂的方式来使用三元运算符,但它不可读且容易出错。

因此,应该支持
if
语句。

为什么要尝试使更难阅读的内容实际上更容易阅读呢?

您的第一个代码不会返回任何内容,因此使用条件运算符是个坏主意。只要使用一个
if
语句,它就更简单了。

在一个块中,你在增加i,而在另一个块中,你在增加j。你如何证明
i+=i其中i>=n?从外观上看,您正试图增加i..我希望这只是一个练习或好奇心,您并不是真的打算这样编写代码。第一个版本的可读性提高了几个数量级。@SMA您是对的:(无需将
i++
更改为
(i=i+1)
,将
j+=2
更改为
(j=j+2)
。您仍然可以在条件运算符中使用
++
+=
int dummy=ij+=2
。它抱怨它在期望值的地方找到了一个变量。(当然
I++
很好。)抱歉,用
()
修复了这个问题。没有
()
的运算符优先级错误。同样的原因你必须使用
()
@Andreas:Doh!我应该想到使用parens。
i = i < n ? i + 1 : (j = j + 2) == j ? i : 0;
int value1 = 1;
int value2 = 2;
int result;
boolean someCondition = true;
result = someCondition ? value1 : value2;