Java 如何检查变量是否与ArrayList中的任何元素匹配?(爪哇)

Java 如何检查变量是否与ArrayList中的任何元素匹配?(爪哇),java,Java,这个问题可能不清楚,所以我会解释我想问什么 我的情况看起来很糟糕: if (( (startX - endX) == 1 && (startY - endY) == 1 ) || ( (startX - endX) == 1 && (startY - endY) == 0 ) || ( (startX - endX) == 1 && (startY - endY) == -1 ) ||

这个问题可能不清楚,所以我会解释我想问什么

我的情况看起来很糟糕:

if (( (startX - endX) == 1 && (startY - endY) == 1 ) ||
                ( (startX - endX) == 1 && (startY - endY) == 0 ) ||
                ( (startX - endX) == 1 && (startY - endY) == -1 ) ||
                ( (startX - endX) == 0 && (startY - endY) == 1 ) ||
                ( (startX - endX) == 0 && (startY - endY) == -1 ) ||
                ( (startX - endX) == -1 && (startY - endY) == 1 ) ||
                ( (startX - endX) == -1 && (startY - endY) == 0 ) ||
                ( (startX - endX) == -1 && (startY - endY) == -1 ))))
为了重构它,我列出了一个包含这些位置的点的列表((1,0),(1,-1),等等)


我试图查找ArrayList的文档,但找不到一个清晰的文档来执行此操作。

您可以为类
实现一个
equals
方法(顺便说一句,该方法名称错误,因为它代表坐标差),然后使用

kingMoveRange.contains(new Point(startX - endX, startY - endY))

您可以简单地使用ArrayList的contains方法,对于您的代码段,它可以是

Point PointToCheck = new Point((startX - endX), (startY - endY));
 if(kingMoveRange.contains(PointToCheck)) {
 // TODO for true
  }

如果它不起作用,那么您可能必须重写Point类的equals方法

如何将原始的
if
条件简化为类似于:

 if (((startX != endX) || (startY != endY)) && // Check we've moved
     ((Maths.abs(startX - endX) <= 1) && (Maths.abs(startY - endY) <= 1))) { // Check we haven't moved far
      // Valid King move
 }
if((startX!=endX)| |(startY!=endY))&&//检查我们是否已移动

((math.abs(startX-endX)您可以使用contains方法检查列表中的匹配项,方法的核心是
equals()
method.“Default”equals()不会帮助他。我没有使用Point类,所以我不知道它的默认方法,关于您刚才尝试翻译的内容:请不要这样做。如果您为他们翻译他们的帖子,您无法确定他们是否真的说了足够的英语来理解针对他们的任何英语评论或答案,您也无法确定他们是否能够理解确保他们能说足够的英语来判断哪些答案(如果有的话)对他们来说是正确的。请参阅meta上的[如何处理非英语内容?](),尤其是第一个答案。您还需要排除startX==endX&&startY==endY@IvanDubrov比如&((startX!=endX)&&((startY!=endY))?@user6792790而不是&(startX!=endX | | startY!=endY)。这只是阻止移动到其当前位置,对吗?
Point PointToCheck = new Point((startX - endX), (startY - endY));
 if(kingMoveRange.contains(PointToCheck)) {
 // TODO for true
  }
 if (((startX != endX) || (startY != endY)) && // Check we've moved
     ((Maths.abs(startX - endX) <= 1) && (Maths.abs(startY - endY) <= 1))) { // Check we haven't moved far
      // Valid King move
 }