2017-06-04 7 views
-1

ノードでプライオリティキューを実装中にエラーjava.lang.NullPointerExceptionが発生します。誰もがpriorityqueueクラスでビルドしないで解決策を持っていますか?ノードでプライオリティキューを実装しているときにnullpointereceptionが発生する

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]の仕組みです。 したがって、2回目の挿入にはNPEがq_array[j].get_freq()になります。

+0

以下のように変更しました。q_array [no_items] = item; no_items ++ ;.しかし、まだNPEを取得しています....... :( – sawyer

+0

もう1つ問題があります。NPEに問題のある場所を指すスタックトレースがあります。 –

関連する問題