该程序给出以下例外:
线程“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);
}
}
答案 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。