0

オブジェクトを作成して使用して入力するのに問題がありますList<Integer>。次のコードを実行すると、オブジェクトが初期化されていないNullPointerExceptionため、が表示されます。

import java.util.List;

public class RBTree {

    public static class Tree {
        public List<Integer> parent;
        public List<Integer> right;
        public List<Integer> left;
        public List<Integer> data;
        public List<Boolean> black;
    }

    public static void main (String[] args){
        Tree rb =new Tree();                
        rb.data.add(-1);
        rb.left.add(-1);
        rb.right.add(-1);
        rb.parent.add(-1);
        rb.black.add(Boolean.TRUE);
    }
}

static行に追加しない限り、コンパイラーからもエラーが発生しますが、不変にpublic static class Treeなりたくありません。Cのaのように多かれ少なかれツリーを使用できる必要があります。Treestaticstruct

4

3 に答える 3

5

ここまでは参照を作成しただけで、基になるオブジェクトはありません。次のことを試してください。

public List<Integer> parent = new ArrayList<Integer>();
// etc.
于 2012-04-09T15:44:08.210 に答える
2

staticネストされpublic static classた型宣言では、インスタンスTreeのコンテキスト外でオブジェクトを作成できることを意味します。RBTreeエラーは何の関係もありません。リストが初期化staticされていないため、NPE が発生します。のコンストラクターに初期化を追加するか、初期化子を追加できます。Tree

于 2012-04-09T15:46:02.083 に答える
1

実際のリスト オブジェクトを作成するのを忘れました:

public List<Integer> parent = new ArrayList<Integer>();
public List<Integer> right = new ArrayList<Integer>();
public List<Integer> left = new ArrayList<Integer>();
public List<Integer> data = new ArrayList<Integer>();
public List<Boolean> black = new ArrayList<Boolean>();

これを行わないと、リストは null になり、そこにないプロパティまたはメソッドにアクセスすると、NullPointerException が生成されます。

于 2012-04-09T15:44:54.850 に答える