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

标签 java arrays list sorting double

寻求java帮助

我已经开始编程 1.5 周了,所以尝试为白痴提供一个简单的答案。这个答案可能就在那里,我可能很愚蠢地意识到我已经读过它了。

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

double[] position = (x,y);

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

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

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

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

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

最佳答案

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

Point2D p = new Point2D.Double(x,y);

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

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

您当前尝试的问题是 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;
}

但是(在两种情况下)可能还有另一个警告,即double值的精度有限。在极少数情况下,比较double值的同一性是合适的(使用==)。但这是否真的是一个问题取决于您的应用案例。

关于java - 在数组中存储坐标并在java中比较它们的最佳方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21938141/

相关文章:

java - 使用 spring java 进行微米度量(无 spring boot)

java - 使用 Image.getInstance 调整 pdf 图像大小

javascript - 单击时循环遍历数组

从输入地址范围(如 1-12A)创建地址字母​​/数字列表的 Pythonic 方法

java - 如何使用 MapStruct 仅映射指定字段?

Java setter 和 getter

javascript - 使用 jquery 获取列表元素及其类

Java - 如何解决这个二维数组沙漏?

python - Pandas 重采样的问题

list - Prolog 在列表中追加列表