当我运行此冒泡排序时,我得到一个空指针异常 我不知道为什么,有人可以解释一下这个问题吗?
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());
}
我正在尝试打印出数组中对象的姓氏。
我在数组中用2个元素测试它,所有其他元素都是null。
异常发生在第三行的if语句中。
答案 0 :(得分:0)
这里的问题是您仍在访问排序中的那些null元素。我假设你的数组比2个元素长。相反,如果对象为null,我将在if语句中包含另一个条件。
if(clipArray[i] != null && clipArray[j] != null && ...Rest of your statements here)
或预先记录有多少元素。所以有int
知道只有2个元素。然后循环直到你碰到它。
Java实际上为您提供了一种通过ArrayList执行此操作的方法。可以找到文档here.而不是循环浏览长度,只需调用.size()
。
答案 1 :(得分:0)
缩短clipArray,使长度与非null元素的数量相匹配。然后你不会试图读取null元素。如果要在读取姓氏时增加数组,可以使用Java Collections API中的ArrayList类的实例。
另外,不确定你是否关心,但是比在外部循环中进行不必要的迭代更有效率的是while(flag)如果没有交换,则flag设置为false。像这里的东西:
答案 2 :(得分:0)
也许这是一个写气泡排序的学术实验,但如果不是,就没有必要编写自己的排序算法。 Arrays.sort可以轻松对其进行排序,or any portion of it:
Arrays.sort(clipArray, 0, 2, new Comparator<Clip>() {
public int compare(Clip c1, Clip c2) {
return c1.getSurname().compareToIgnoreCase(c2.getSurname());
}
});