NullPointerException с радикальной сортировкой - PullRequest
1 голос
/ 24 декабря 2009

Я пытаюсь запрограммировать сортировку по основанию, но при запуске этого кода у меня появляется исключение NullPointerException

public class ThreeRadixSort {

    public Queue getSortedData(Queue queue){
        Queue array[] = new Queue[10];

        for(int i=1;i<=3;i++){

        while(queue.front != null){
            Student student = queue.dequeue();

            if( i == 1) 
                array[(int)(student.id%10)].enqueue(student);
            else if( i == 2)
                array[(int)((student.id%100)/10)].enqueue(student);
            else    
                array[(int)(student.id/100)].enqueue(student);

        }

        for(int j=0;j<=9;j++){

        while( array[j] != null && array[j].front != null)
            queue.enqueue(array[j].dequeue());
        }
        }   
        return queue;
    }
}

Показ исключений, когда агрегат достигает

    array[(int)(student.id%10)].enqueue(student);

Ответы [ 2 ]

2 голосов
/ 24 декабря 2009

Проблема здесь в том, что при инициализации массива Queue каждое пятно инициализируется нулем. Итак, сейчас вы пытаетесь вызвать метод enqueue для null. Вам нужно перебрать каждую позицию массива и присвоить ему new Queue() или как бы вы его не инициализировали.

Так, например:

for (int i = 0; i < array.length; i++) {
  array[i] = new Queue();
}
1 голос
/ 24 декабря 2009

эта строка:

 Queue array[] = new Queue[10]

объявляет только массив очередей. Он не выделяет очереди сам. Вы должны инициализировать их так:

 for(int i; i<10; i++)
 {
      array[i] = new Queue();
 }

p.s. Кстати. Вместо того, чтобы полагаться на магическое число, такое как «10», лучше практиковать, чтобы сделать его константой и объявить в верхней части вашей программы. Вроде таких:

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