Java bubblesort中的NullPointerException,带有acm对话框

时间:2010-06-16 18:44:46

标签: java sorting

该程序给出以下例外:

线程“main”java.lang.NullPointerException中的异常     at myclasses.BubbleSort.run(BubbleSort.java:42)     at acm.program.Program.runHook(Program.java:1519)     at acm.program.Program.startRun(Program.java:1508)     at acm.program.Program.start(Program.java:729)     at myclasses.BubbleSort.main(BubbleSort.java:49)

出了什么问题?

非常感谢你!

package myclasses;

import acm.program.DialogProgram;

public class BubbleSort extends DialogProgram {
    int[] array;

    public int[] getArray() {
    return array;
    }

    public void setArray(int[] array) {
    this.array = array;
}   


void swap(int firstPos, int secondPos) {
    int temp = array[firstPos];
    array[firstPos] = array[secondPos];
    array[secondPos] = temp;
}

public void bubblesort() {
    int i, j, k;
    for (i = 1; i < array.length; i++) {
        j = i;
        k = array[i];
        while (j > 0 && array[j - 1] > k) {
            array[j] = array[j - 1];
            --j;
        }
        array[j] = k;
    }
} 


public void run() {
    BubbleSort a = new BubbleSort();
    a.setArray(new int[] {1, 3, 5, 7, 6, 2});
    a.bubblesort();
    StringBuffer sb = new StringBuffer(a.array.length * 2);
    for (int i = 0; i < getArray().length; i++) sb.append(getArray()[i]).append(" ");
    println(sb);

}    


public static void main(String[] args) {
    new BubbleSort().start(args);

            }

}

3 个答案:

答案 0 :(得分:0)

检查getArray()返回的内容。我的猜测是null

或者

其中一次迭代getArray()[i]返回null

答案 1 :(得分:0)

将run方法中的for循环更改为:

for (int i = 0; i < a.getArray().length; i++) sb.append(a.getArray()[i]).append(" ");

<强>解释

在这一行,你有2次调用getArray(),它会在getArray()中创建的BubbleSort实例上调用main,而数组已在{{1}上设置在a中创建的BubbleSort实例,因此for循环中对run()的2次调用需要为getArray。从未设置a.getArray()中创建的实例中的数组,因此main会抛出getArray().length

答案 2 :(得分:0)

第42行是(int i = 0; i&lt; getArray()。length; i ++)sb.append(getArray()[i])。append(“”);

只有在此行getArray上可以为null的对象。所以将它添加到你的for循环中(int i = 0; getArray()!= null&amp;&amp; i&lt; getArray()。length; i ++)。

另外,我会检查填充getArray()内容的方法,看看为什么它是null。