有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

在数组中存储坐标并在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; } 这行不通。。(我想)

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

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


共 (2) 个答案

  1. # 1 楼答案

    使用^{},这正好意味着在Point对象中存储2double。你可以像现在一样,在一个ArrayList中保留多个点。要检查一个点是否已经存在,只需循环遍历它并调用.equals(newPoint)来比较这些点。但是,由于double精度点可能永远不会彼此相等,您可能需要检查两个点是否在彼此之间的某个小距离内(同样,例如equals()

  2. # 2 楼答案

    这里有几个问题。首先,将二维点描述为2元素double[]数组不是很优雅。相反,您应该考虑使用^ {CD2>}对象:

    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的恒等值(与==)是合适的。但这是否真的是一个问题取决于你的申请情况