查找数组列表中的对象,由布尔值定义

时间:2017-09-29 08:27:19

标签: java boolean point

我正在开发一个应该是迷宫求解器的项目。我的代码几乎完成,除了一位。我需要得到我的数组列表中的一个点的索引,但我有一个布尔值调整我需要的点。我需要能够得到满足布尔值的点的索引为true,但我不太清楚如何做到这一点。我已经附上了下面的一些代码。我希望它能告诉你我的意思!

这是布尔值,其中包含该点的条件:

public static boolean adjacent( Point p1, Point p2 )
{   
    int pointX1 = p1.getX();
    int pointX2 = p2.getX();
    int pointY1 = p1.getY();
    int pointY2 = p2.getY();

    while (pointY1 == pointY2)
    {
        if(pointX1 + 1 == pointX2)
        {
            return true;
        }
        else if(pointX1 - 1 == pointX2)
        {
            return true;
        }
    }

    while (pointX1 == pointX2)
    {
        if(pointY1 + 1 == pointY2)
        {
            return true;
        }
        else if(pointY1 - 1 == pointY2)
        {
            return true;
        }
    }

    return false;

}

这是我到目前为止我的数组列表:

public static boolean isSolvable( ArrayList<Point> points )
{   
    ArrayList<Point> second = new ArrayList<Point>();
    second.add(points.get(0));
    points.remove(0);


    while(second.size() >= 1)
    {

        //if second contains adjacent point. (Add adjacent to array list, and subtract from other array list[point])
        if(points.contains(adjacent(second.get(0), points.get(0))) == true)
        {


        }


    }

    return false;
}

1 个答案:

答案 0 :(得分:1)

据我所知,您的adjacent(Point, Point)方法存在一个主要问题。而是使用while(我不知道你为什么要在这里使用它们)将它们改为if s:

if(pointY1 == pointY2)
{
    if(pointX1 + 1 == pointX2
        || pointX1 - 1 == pointX2)
        return true;
}

if(pointX1 == pointX2)
{
    if(pointY1 + 1 == pointY2
        || pointY1 - 1 == pointY2)
        return true;
}

编辑: 正如@Lars所说,您可以在单行功能中将其写为:

return Math.abs(p1.getX() - p2.getX()) + Math.abs(p1.getY() - p2.getY()) == 1;

另外,我会尝试回溯,贪婪,甚至是分支定界算法来解决你的迷宫。