在数组中存储坐标并在java中比较它们的最佳方法?

use*_*754 0 java arrays sorting double list

请求帮助

我是编程的1.5周,所以试着为一个idoit轻松回答.这个答案可能就在那里,我可能会傻到意识到我已经读过了.

所以我有一堆对象实例,我想添加Instance.position

double[] position = (x,y);
Run Code Online (Sandbox Code Playgroud)

某种数组/列表/堆栈,所以我可以检查一下不同的对象Instance.position是否与我设置为数组/堆栈/列表的对象相同.
这就是我所拥有的:

public ArrayList<double[]> objPositions = new ArrayList<double[]>();

public boolean isThereAObj(double[] userPosition){ if (objPositions.contains(userPosition)); return true; } 这不起作用..(我认为)

数组列表已经在前面定义,理想情况下我的数组列表可以是对象,我可以用我的比较对象位置检查对象元素的位置.

所以基本上我想要一个包含我在程序中创建的所有对象的所有实例的列表,然后我希望能够将一个或多个元素与另一个对象(不在列表中)进行比较

Mar*_*o13 6

这里有几个问题.首先,将2D点描述为2元素double[]阵列并不是非常优雅.相反,您应该考虑使用java.awt.geom.Point2D对象:

Point2D p = new Point2D.Double(x,y);
Run Code Online (Sandbox Code Playgroud)

这使得您正在寻找的方法的实现更加容易:

private final List<Point2D> wallPositions = new ArrayList<Point2D>(); 
public boolean isThereAWall(Point2D userPosition) { 
    return wallPositions.contains(userPosition); 
}
Run Code Online (Sandbox Code Playgroud)

您当前尝试的问题是double[]数组不知道您正在寻找的"相等"的概念.(更正式地说:没有适当的Object#equals(Object)方法实现它们)

但是,如果你想坚持你的双阵列(虽然我不推荐这个),你可以做类似的事情

private final List<double[]> wallPositions = new ArrayList<double[]>(); 

public boolean isThereAWall(double[] userPosition) { 
    for (double entry[] : wallPositions) {
        if (Arrays.equal(entry, userPosition)) {
            return true;
        }
    }
    return false;
}
Run Code Online (Sandbox Code Playgroud)

但是(在这两种情况下)可能是另一个警告,即double价值的有限精度.在极少数情况下,比较double身份(与==)的值是合适的.但这是否确实存在问题取决于您的应用案例.