the program gives following exception:
Exception in thread "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)
what is wrong?
thank you very much!
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);
}
}
Change the for loop in your run method to:
for (int i = 0; i < a.getArray().length; i++) sb.append(a.getArray()[i]).append(" ");
Explanation:
On this line you had 2 calls to getArray() which will call getArray() on the instance of BubbleSort created in main whereas the array has been set on a, the instance of BubbleSort created in run() so the 2 calls to getArray in the for loop need to be a.getArray(). The array in the instance created in main has never been set so getArray().length will throw a NullPointerException.
Check what getArray() is returning. My guess would be null
Or
For one of the iterations getArray()[i] returns null
Line 42 is for (int i = 0; i < getArray().length; i++) sb.append(getArray()[i]).append(" ");
Only object that can ben null on this line getArray. So add this to your for loop (int i = 0; getArray()!=null && i < getArray().length; i++) .
Also I would check the method populating the content of getArray() to see why it's null.
加载中,请稍侯......
精彩评论