我正在编写小程序,想要通过循环访问数组中的元素。我需要为下一次迭代增加“数组索引”变量。
这是代码:
winner[turn] = subField[(int)Math.floor(i / 10.0)][i % 10].equalsIgnoreCase("O") ? false : winner[turn];
turn++;
是否可以用它编写一行代码?
PS:我正在尝试为自己少写几行。这是对大脑和逻辑的训练。
最佳答案
嗯,这是肯定可以做到的:
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
,也无需赋值。
[编辑]
耶!刚刚发现我的异或错了...这就是高尔夫的问题,花了很多时间才发现它是错的....(在这种情况下,如果 cond 为 true 但之前的值为 false,则获胜不起作用)。
所以让我以其他方式打高尔夫球:)
winner[turn] = !subField[i/10][i%10].equalsIgnoreCase("O") & winner[turn++];
注意!和&
[编辑]
感谢@Javier 给了我一个更加紧凑和困惑的版本:) 这个:
winner[turn++] &= !subField[i/10][i%10].equalsIgnoreCase("O");
关于java - Java三元运算符的自增,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20125602/