数据集中的Java查找最近对提供NullPointerException

数据集中的Java查找最近对提供NullPointerException,java,nullpointerexception,mergesort,divide-and-conquer,closest-points,Java,Nullpointerexception,Mergesort,Divide And Conquer,Closest Points,我试图从几个不同的数据集中找到最接近的一对。到目前为止,它适用于有12个点的SmallerSet,但当我更改有100个点的数据集时。在循环前面加上“--->”的那一行,它给出了null指针例外,我不知道该怎么解 public static PointPair closestPair(Point2D.Double Px[], Point2D.Double Py[],int n) { PointPair closestpairLeft; PointPair closestpairRi

我试图从几个不同的数据集中找到最接近的一对。到目前为止,它适用于有12个点的SmallerSet,但当我更改有100个点的数据集时。在循环前面加上“--->”的那一行,它给出了null指针例外,我不知道该怎么解

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);
    }
public static PointPair closestPair(Point2D.Double Px[],Point2D.Double Py[],int n){
点对闭合气左;
点对近右;
如果(n按以下步骤进行:

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];
    }
}
for(inti=0,k=0,j=0;i如果(Py[i]!=null&&Xl[mid-1]!=null&&Py[i].getX()非常感谢,它起到了作用,但我不明白为什么我们要检查所有边界。非常欢迎您。您应该检查所有边界,以确保代码不会试图从超出边界的索引访问元素。始终建议进行此类检查,以避免意外错误。