NullPointerException в пузырьковой сортировке Java с помощью диалогового окна acm - PullRequest
1 голос
/ 16 июня 2010

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

Исключение в потоке "main" 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);

            }

}

Ответы [ 3 ]

0 голосов
/ 16 июня 2010

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

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

Пояснение:

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

0 голосов
/ 16 июня 2010

Строка 42 предназначена для (int i = 0; i

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

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

0 голосов
/ 16 июня 2010

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

Или

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...