优先队列Java

时间:2018-10-30 10:37:53

标签: java nullpointerexception priority-queue

很抱歉,我和一个朋友坐在这个问题上已经有一段时间了,我们似乎很困惑。我们必须创建一个与Elements类交互的PriorityQueue类。 main方法中的想法是根据优先级将元素放入队列,然后以正确的顺序返回这些元素。现在,如果我们尝试使用此代码,则会得到一个java.lang.NullPointerException。我们的getPriority看起来像这样:

public int getPriority() {
 return priority;
}

我们真的不知道空指针异常的来源...

public class PriorityQueue {
 static final int SIZE = 32;
 Element[] q = new Element[SIZE];
 int len;
 int head = 31;
 int tail = 31;

 // Insert an element into the queue according to its priority
 boolean put(Element x) {
  if (head == 0) { return false;}    else {
   for (int g=31; g >= 0; g--) {
    if (q[g].getPriority() == x.getPriority()||(q[g].getPriority() < x.getPriority() && q[g-1].getPriority() > x.getPriority())) {
     for (int y=g; y >= head; y--) {
      Element z = q[y];
      q[y] = x;
      q[y-1] = z;
     }
    }
   }
  } head--;
return true;
}

// Return the element with the highest priority from the queue
Element get() {
return q[head];
}

// Return the queue length
int length() {
return q.length;
}

// Print the queue contents
public String toString() {
    return q.toString();
}
}

非常感谢您。

1 个答案:

答案 0 :(得分:0)

因此,您有一个Elements的空数组 而你做这样的事情:

 for (int g=31; g >= 0; g--) {
    if (q[g].getPriority() == x.getPriority()||(q[g].getPriority() < x.getPriority() && q[g-1].getPriority() > x.getPriority())) {

这里是否q[g]null

相关问题