在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());
}
});