这个 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
我在 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