Создать массив очередей в Java - PullRequest
4 голосов
/ 01 декабря 2011

Я пишу свой собственный класс PriorityQueue, и у меня есть:

private Queue<E>[] queues;


public PriorityQueue(int maxSize) {
  queues = new Queue[maxSize+1]; 
  size = maxSize;
}

Это компилируется, но когда я вызываю .add в priorityQueue, я получаю эту ошибку:

java.lang.NullPointerException
    at PriorityQueue.add(PriorityQueue.java:13)

Вот добавьте:

public void add(E item, int priority) {
  queues[priority].offer(item);
}

Ответы [ 5 ]

6 голосов
/ 01 декабря 2011

вам нужно инициализировать свои очереди:

public PriorityQueue(int maxSize) {
  queues = new Queue[maxSize+1]; 
  size = maxSize;
  for(int i = 0; i <= maxSize; i++) 
    queues[i] = new LinkedList<E>(); 
}

Вы можете выбрать любую реализацию очереди, какую захотите, я просто выбрал LinkedList, потому что он сначала появился у меня в голове ...

0 голосов
/ 01 декабря 2011

queues [приоритет] возвращает очередь, для которой вы вызываете .offer ().Поскольку вы не инициализируете элементы массива, вы вызываете .offer () для пустой ссылки, что приводит к вашей ошибке.

0 голосов
/ 01 декабря 2011

Когда вы делаете это:

 queues = new Queue[maxSize+1]; 

вы создаете массив размером maxSize + 1, но каждый элемент массива по-прежнему равен нулю. Вам нужно перебрать массив и поместить объект Queue в каждую позицию, прежде чем вы сможете добавить к нему.

0 голосов
/ 01 декабря 2011

Вы создаете новый массив, но никогда не инициализируете элементы queues как очередь. По умолчанию все элементы queues равны null, пока вы не инициализируете их.

0 голосов
/ 01 декабря 2011

Вы не инициализировали массив очередей, чтобы иметь какие-либо очереди.

Вам необходимо поместить очереди в массив. Также не уверен, почему вы добавляете дополнительную очередь, если только вы не пытаетесь притвориться, что массивы не основаны на 0.

public PriorityQueue(int maxSize) {
    queues = new Queue<E>[maxSize+1]; 
    for (int i = 0; i < maxSize + 1; i++) {
        queues[i] = new LinkedList<E>(); // Or whatever implementation you're using.
    }
    size = maxSize;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...