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

时间:2018-01-14 16:04:07

标签: java if-statement ternary-operator

示例:

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

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

(但编译器显示错误)

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

3 个答案:

答案 0 :(得分:5)

(它是“条件”运算符。它是一个三元运算符,而现在Java只有一个,但是......)

由于您并不总是更改i的值,并且Java不允许任意表达式作为独立语句(像其他语言一样,如JavaScript),因此您无法重写条件运算符除非你给自己一个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为假,则只会将i < n分配回自身,因为我们知道(j = j + 2) == j将为true

但又一次:没有理由。

答案 1 :(得分:2)

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

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

  

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

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

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

作为T.J.如图所示,您可以使用复杂的方式使用三元运算符,但它不易读并且容易出错。

因此{@ 1}}声明应该受到青睐 为什么要更加努力地阅读一个看起来很简单的东西?

答案 2 :(得分:2)

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