Java Find Closest Pair in Dataset 给出 NullPointerException [重复]

Posted

技术标签:

【中文标题】Java Find Closest Pair in Dataset 给出 NullPointerException [重复]【英文标题】:Java Find Closest Pair in Dataset gives NullPointerException [duplicate] 【发布时间】:2020-08-02 21:25:02 【问题描述】:

我正在尝试从几个不同的数据集中找到最接近的对。到目前为止,它适用于具有 12 个点的 SmallerSet,但是当我更改具有 100 个点的数据集时。它在我在循环之前添加“--->”的那一行给出了 NullPointer Excepiton。我不知道要解决它。

public static PointPair closestPair(Point2D.Double Px[], Point2D.Double Py[],int n) 
    PointPair closestpairLeft;
    PointPair closestpairRight;

    if (n <= 3) 
        if(n==2)
            return new PointPair(Px[0],Px[1]);
        else
        PointPair p1=new PointPair(Px[0],Px[1]);
        PointPair p2=new PointPair(Px[0],Px[2]);
        PointPair p3=new PointPair(Px[1],Px[2]);

        if(p1.closerThan(p2)<0)
            if(p1.closerThan(p3)<0)
                return p1;
            else
                return p3;
        
        else
            if(p2.closerThan(p3)<0)
                return p2;
            else
                return p3;
        
        
     else 
        int mid = n / 2;


        Point2D.Double Xl[] = Arrays.copyOfRange(Px, 0, mid);
        Point2D.Double Xr[] = Arrays.copyOfRange(Px, mid, n);

        Point2D.Double Yl[] = new Point2D.Double[Xl.length];
        Point2D.Double Yr[] = new Point2D.Double[Xr.length];


       ---> for (int i = 0, k = 0, j = 0; i < n; i++) 
            if (Py[i].getX() <= Xl[mid-1].getX()&& j<mid) 
                Yl[j++] = Py[i];
             else if (k<mid)
                Yr[k++] = Py[i];

            

        

        closestpairLeft=closestPair(Xl,Yl,mid);
        closestpairRight=closestPair(Xr,Yr,n-mid);
    

【问题讨论】:

【参考方案1】:

按如下方式进行:

for (int i = 0, k = 0, j = 0; i < n && i < Py.length && (mid - 1) < Xl.length && j < Yl.length
        && k < Yr.length; i++) 
    if (Py[i] != null && Xl[mid - 1] != null && Py[i].getX() <= Xl[mid - 1].getX() && j < mid) 
        Yl[j++] = Py[i];
     else if (k < mid) 
        Yr[k++] = Py[i];
    

请注意,我不仅检查了Py[i]Xl[mid-1]null,还检查了数组的边界以避免ArrayIndexOutOfBoundsException

【讨论】:

非常感谢,它起作用了,但我不明白,为什么我们应该检查所有边界。 不客气。您应该检查所有边界以确保代码不会尝试访问超出范围的索引中的元素。始终建议进行此类检查以避免意外错误。

以上是关于Java Find Closest Pair in Dataset 给出 NullPointerException [重复]的主要内容,如果未能解决你的问题,请参考以下文章

[GeeksForGeeks] Find the largest pair sum in an unsorted array

python编写自定义函数计算一维numpy数组中与指定目标数值最接近(距离最近)的数值(find closest value in numpy array to a certain value)

无法理解 Closest-Pair 分治算法

UVA - 10245 The Closest Pair Problem

HDU 6697 Closest Pair of Segments (计算几何 暴力)

UVa 10245 - The Closest Pair Problem