如何检查变量是否匹配阵列列表中的任何元素?(Java)



这个问题可能不清楚,所以我将解释我想问的内容。

我的状况看起来真的很混乱:

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<Point> kingMoveRange = new ArrayList<Point>();
    kingMoveRange.add(new Point(1, 0)); 
    kingMoveRange.add(new Point(0, -1));
    kingMoveRange.add(new Point(0 , 1));
    kingMoveRange.add(new Point(-1, -1));
    kingMoveRange.add(new Point(-1, 1));
    kingMoveRange.add(new Point(1, -1));
    kingMoveRange.add(new Point(1, 1));

看起来像上面。

,但我不确定如何写

之类的东西
"If (startX - endX) and (startY - endY) matches ANY one of the pairs in the list "

我试图寻找ArrayList的文档,但找不到清晰的文件。

您可以为类Point实现equals方法(该类别为BTW,因为它代表坐标差),然后使用

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

如何将原始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
 }

您可以简单地使用包含的ArrayList方法,对于您的代码段,它可能就像

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

如果它不起作用,那么您可能必须覆盖等于点类方法

相关内容

最新更新