2010-06-16 3 views
1

программа выдает следующее исключение:NullPointerException в Java BubbleSort с Acm диалоговом

Исключение в потоке "основного" java.lang.NullPointerException в myclasses.BubbleSort.run (BubbleSort.java:42) в acm.program .Program.runHook (Program.java:1519) в acm.program.Program.startRun (Program.java:1508) в 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

Измените цикл в вашем методе запуска в:

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

Объяснение:

На этой линии у вас было 2 ca LLS к getArray(), который будет вызывать getArray() на экземпляре BubbleSort созданных в main тогда как массив был установлен на a, экземпляр BubbleSort создан в run() таким образом, 2 вызовов getArray в цикл должен быть a.getArray(). Массив в экземпляре, созданный в main, никогда не был установлен так, чтобы getArray().length выкинул NullPointerException.

+0

большое спасибо! это была проблема. – qzar

0

Проверьте, что возвращает getArray(). Мое предположение было бы null

Или

Для одной из итераций getArray()[i] возвращает null

+0

Я не знаю, почему оно должно быть возвращено null. – qzar

0

Строка 42 предназначена для (int i = 0; i < getArray(). Length; i ++) sb.append (getArray() [i]). Append ("");

Только объект, который может иметь значение null в этой строке getArray. Поэтому добавьте это в свой цикл for (int i = 0; getArray()! = Null & & i < getArray(). Length; i ++).

Также я бы проверил способ заполнения содержимого getArray(), чтобы узнать, почему он равен нулю.