2017-06-04 96 views
-1

我得到錯誤java.lang.NullPointerException,同時實現節點的優先級隊列。有沒有人有沒有使用內置priorityqueue類的解決方案?nullpointerexception同時實現節點優先級隊列

class node {       //NODE CLASS 

    public String ch; 
    public int freq; 
    node right_child, left_child; 

    public node(String ch, int freq) { 
     this.ch = ch; 
     this.freq = freq; 

    } 

    public String get_char() { 
     return ch; 
    } 

    public int get_freq() { 
     return freq; 
    } 

} 

//END NODE CLASS 
class priority_queue { 

    private final int size; 
    private final node[] q_array; 

    private int no_items = 0; 

    public priority_queue(int max) { 
     this.size = max; 
     q_array = new node[size]; 
    } 

    public void insert(node item) { 
     int j; 
     if (no_items == 0) { 
      q_array[++no_items] = item; 
      System.out.println("first item"); 
     } else { 
      for (j = no_items - 1; j >= 0; j--) { 
       if (item.get_freq()> q_array[j].get_freq()) { 
        q_array[j + 1] = q_array[j]; 

       } else { 
        break; 
       } 

      } 
      q_array[j] = item; 
      no_items++; 
     } 
    } 

    public node remove() { 
     return q_array[--no_items]; 

    } 

    public void process() { 
     node first, second; 
     int new_freq; 
     while (q_array.length > 1) { 
      new_freq = 0; 
      first = this.remove(); 
      //f1 = first.freq; 
      second = this.remove(); 
      //f2=second.freq; 

      new_freq = first.get_freq() + second.get_freq(); 
      node new_node = new node("*", new_freq); 
      new_node.left_child = first; 
      new_node.right_child = second; 
      this.insert(new_node); 

     } 

    } 

回答

0

您不要添加任何東西到q_array[0]。當no_items爲0時,你首先增加它,然後插入1個位置的元素。這就是q_array[++no_items]的工作原理。 因此,您在第二次插入時在q_array[j].get_freq()中有NPE。

+0

我相應地修改了它,如下所示,q_array [no_items] = item; no_items ++ ;.但仍然得到NPE ....... :(: – sawyer

+0

然後你有一個問題,NPE有一個堆棧跟蹤指向問題的地方,請在這裏提供。 –