这个 java 条件是做什么的?

What is this java conditional doing?

我在 Java 中制作了一个九游戏拼图。目标是让数字恢复正常。下面的游戏板存储在一个 2d ArrayList 中。游戏看起来像:

2 5 1
3 6 7
4 8

有效着法是 7 或 8,在这种情况下,空白 space 将与所选数字交换。 6 无效,此状态下的任何数字 1 - 6 也无效。我编写 isValidMove 函数的第一种方法是嵌套开关和条件语句的噩梦。我遇到了别人的代码,它非常适合我。这是替换我的嵌套混乱的代码:

int differenceX = Math.abs(empty1 - move1);
int differenceY = Math.abs(empty2 - move2);
if (differenceX <= 1 && differenceY <= 1 && !(differenceX == 1 && differenceY == 1))
{
    return true;
}
return false;

我了解 && !(differenceX == 1 && differenceY == 1)) 之前发生的事情。 检查差异的绝对值是 0 还是 1 是有意义的。然后它似乎也在检查差异是否不等于 1。我认为这与确保像 6 这样的数字不被认为是有效的有关。有人可以解释这里发生了什么吗?我的脑袋疼。

将条件从 if 中移出,它可能更有意义:

int differenceX = Math.abs(empty1 - move1);
int differenceY = Math.abs(empty2 - move2);

boolean isNearHorizontal = differenceX <= 1;
boolean isNearVertical = differenceY <= 1;
boolean isNearDiagonal = differenceX == 1 && differenceY == 1;

// is near horizontally and vertically and not diagonally !
if ( isNearHorizontal && isNearVertical && !isNearDiagonal )
{
    return true;
}
return false;

它做同样的事情,但对您来说可能更容易阅读。

顺便说一句,这是许多程序员在一段时间后发现的一个技巧,可以进一步简化代码阅读

if (statement)
    return true
return false

等同于

return statement