增加三元运算符Java

时间:2013-11-21 15:51:49

标签: java increment ternary-operator

我正在编写小程序,并希望通过循环访问数组中的元素。我需要为下一次迭代增加“数组索引”变量。

以下是代码:

winner[turn] = subField[(int)Math.floor(i / 10.0)][i % 10].equalsIgnoreCase("O") ? false : winner[turn];
turn++;

是否可以从中创建一行代码?

PS:我正在尝试为自己写少行。这是对大脑和逻辑的训练。

2 个答案:

答案 0 :(得分:4)

嗯,可以肯定这样做:

winner[turn] = subField[(int)Math.floor(i / 10.0)][i % 10].
                              equalsIgnoreCase("O") ^ winner[turn++];

看那里甚至没有三元运营商。

但不是因为它更短更好(当然也不是更清晰)。所以我建议你这么多行:

String aSubField = subField[(int)Math.floor(i / 10.0)][i % 10];
if (aSubField.equalsIgnoreCase("O"))
    winner[turn] = false;
turn++;

看,即使比较产生false,也不需要分配值。

[编辑]

YAY!刚刚发现我的XOR错了......这只是高尔夫的问题,花了很多时间才弄清楚它是错误的....(在这种情况下,如果cond是真的,但之前的值是假的,它赢了不行。)

所以让我以其他方式打高尔夫球:)

winner[turn] = !subField[i/10][i%10].equalsIgnoreCase("O") & winner[turn++];

注意!和&

[编辑]

感谢@Javier给我一个更紧凑和混乱的版本:)这一个:

winner[turn++] &= !subField[i/10][i%10].equalsIgnoreCase("O");

答案 1 :(得分:2)

让我们分解一下。你拥有的是:

winner[turn] = (some condition) ? false : (expression involving turn)
(increment turn)

那么,为什么不在数组访问中增加转弯?这意味着它会在您评估右侧表达式时增加,但您可以根据需要轻松将其调整回其先前的值。

winner[turn++] = (some condition) ? false : (expression involving (turn - 1) )