是否可以将这两行写成三元运算符?

is it possible to write these 2 lines as Ternary Operators?

示例:

if (i < n) 
    i++;
else 
   j += 2;

我做到了:

i += i < n ? 1 : j += 2; 

(但编译器显示错误)

如果可能的话,我如何将这些行写成三元运算符.. 谢谢...

(这是 "conditional" 运算符。它是 a 三元运算符,现在 Java 是唯一的,但是...)

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

也没有理由这样做。 if 说得很清楚了。

但如果你愿意,给定:

private static void nop(int n) {
}

然后

nop(i < n ? (i = i + 1) : (j = j + 2));

还有这种比较绕口的方法:

i = i < n ? i + 1 : (j = j + 2) == j ? i : 0;

...如果 i < n 为假,它只是将 i 赋值给它自己,因为我们知道 (j = j + 2) == j 将是 true.

但是再说一次:没有理由。

条件运算符?(或三元运算符)旨在为单个变量赋值。

Oracle training/examples 以这种方式记录此操作:

this operator is also known as the ternary operator because it uses three operands. In the following example, this operator should be read as: "If someCondition is true, assign the value of value1 to result. Otherwise, assign the value of value2 to result."

int value1 = 1;
int value2 = 2;
int result;
boolean someCondition = true;
result = someCondition ? value1 : value2;

所以,不,你不能 directly 使用三元运算符将结果分配给 j i.


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

所以应该赞成if的说法。
为什么要让实际上很容易阅读的东西变得更难阅读?

您的第一个代码没有 return 任何内容,因此使用条件运算符不是一个好主意。就用一个if语句,更简单。