在数组中存储坐标并在java中进行比较的最佳方法?
请求java帮助
我已经开始编程1.5周了,所以试着让一个idoit的回答简单一些。这个答案可能就在那里,我可能会傻到意识到我已经读过了
所以我有一堆对象实例,我想添加实例。位置是什么
double[] position = (x,y);
到某种数组/列表/堆栈,这样我就可以检查不同的对象实例。位置与我在数组/堆栈/列表中设置的位置相同
这就是我所拥有的:
public ArrayList<double[]> objPositions = new ArrayList<double[]>();
public boolean isThereAObj(double[] userPosition){
if (objPositions.contains(userPosition));
return true;
}
这行不通。。(我想)
其中数组列表已在前面定义 理想情况下,我的数组列表可以是一组对象,我可以用比较对象的位置来检查对象元素的位置
因此,基本上我希望有一个列表,其中包含我在程序中创建的所有对象的所有实例,然后我希望能够将它们的一个或多个元素与另一个对象(不在列表中)进行比较
# 1 楼答案
使用^{} ,这正好意味着在
Point
对象中存储2double
。你可以像现在一样,在一个ArrayList
中保留多个点。要检查一个点是否已经存在,只需循环遍历它并调用.equals(newPoint)
来比较这些点。但是,由于double
精度点可能永远不会彼此相等,您可能需要检查两个点是否在彼此之间的某个小距离内(同样,例如equals()
)# 2 楼答案
这里有几个问题。首先,将二维点描述为2元素
double[]
数组不是很优雅。相反,您应该考虑使用^ {CD2>}对象:这使得您正在寻找的方法的实现变得更加容易:
您当前尝试的问题是
double[]
数组不知道您正在寻找的“相等”概念。(更正式地说:没有适合他们的Object#equals(Object)
方法的适当实现)然而,如果你想坚持你的双数组(尽管我不建议这样做),你可以这样做
但是(在两种情况下)可能还有另一个警告,即
double
值的有限精度。在非常的情况下,比较double
的恒等值(与==
)是合适的。但这是否真的是一个问题取决于你的申请情况