寻求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/