Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/378.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在java中使用气泡排序时出现空指针异常_Java_Arrays_Sorting_Nullpointerexception - Fatal编程技术网

在java中使用气泡排序时出现空指针异常

在java中使用气泡排序时出现空指针异常,java,arrays,sorting,nullpointerexception,Java,Arrays,Sorting,Nullpointerexception,当我运行这个冒泡排序和 我不知道为什么,有人能解释一下这个问题吗 for(int i = 1; i < clipArray.length; i++) { for(int j = 0; j < clipArray.length - 1; j++) { if(((clipArray[j].getSurname()).compareToIgnoreCase((clipArray[j+1].getSurname()))) > 0) { C

当我运行这个冒泡排序和 我不知道为什么,有人能解释一下这个问题吗

for(int i = 1; i < clipArray.length; i++) {
    for(int j = 0; j < clipArray.length - 1; j++) {
        if(((clipArray[j].getSurname()).compareToIgnoreCase((clipArray[j+1].getSurname()))) > 0) {
            Clip temp = clipArray[j];
            clipArray[j] = clipArray[j+1];
            clipArray[j+1] = temp;
        }
    }
}
for(int g = 0; g < clipArray.length; g++) {
    System.out.println(clipArray[g].getSurname());
}
for(int i=1;i0){
夹具温度=夹具阵列[j];
clipArray[j]=clipArray[j+1];
clipArray[j+1]=温度;
}
}
}
对于(int g=0;g
我试图打印出数组中对象的姓氏


我用数组中的2个元素测试了它,所有其他元素都为null


异常发生在第三行的if语句中。

这里的问题是您仍然在访问排序中的那些空元素。我假设你的数组不仅仅是2个元素。相反,我将在if语句中包含另一个条件,用于确定对象是否为null

if(clipArray[i] != null && clipArray[j] != null && ...Rest of your statements here)
或者事先记录有多少元素。所以有一个
int
知道只有两个元素。然后循环直到你击中它


Java实际上提供了一种通过ArrayList实现这一点的方法。可以找到文档,而不是循环长度,只需调用
.size()

Shorten clipArray,使长度与非空元素的数量匹配。这样,您就不会试图读入null元素。如果希望在读取姓氏时扩展数组,可以使用Java Collections API中的ArrayList类的实例

另外,不确定您是否关心,但比在外部循环中执行不必要的迭代稍微更有效的是执行while(flag),其中如果没有交换,flag设置为false。类似于这里的一个:


也许这是一个编写冒泡排序的学术实验,但如果不是,就没有必要编写自己的排序算法。可以很容易地对它进行排序,:

Arrays.sort(clipArray,0,2,新的比较器(){
公共整数比较(片段c1、片段c2){
返回c1.getNames().compareToIgnoreCase(c2.getNames());
}
});

“我用数组中的2个元素对其进行了测试,所有其他元素都为空。”您将得到一个空指针异常。仔细考虑一下这两个事实。
Arrays.sort(clipArray, 0, 2, new Comparator<Clip>() {
    public int compare(Clip c1, Clip c2) {
        return c1.getSurname().compareToIgnoreCase(c2.getSurname());
    }
});