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

时间:2013-10-25 03:22:47

标签: 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) {
            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语句中。

3 个答案:

答案 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。像这里的东西:

http://mathbits.com/MathBits/Java/arrays/Bubble.htm

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