2012-04-09 11 views
0

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

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); 
    } 
} 

私はpublic static class Treeラインにstaticを追加しない限り、コンパイラは私にエラーが発生しますが、私はTreestaticすなわち不変になりたくありません。私はCでstructのようなツリーを使うことができるようにする必要があります。

+1

キーワード 'static'は不変性とは関係ありません! – Anthales

+1

"これは私が何か非常に基本的なものを見逃しているように感じる" - はい、あります。参照名と型を宣言しても、メモリは割り当てられません。 – duffymo

+1

いくつかのJavaチュートリアルを読み、あなたはこれらのような質問をするのに多くの時間を節約できます。これは基本的なものです。 – aglassman

答えて

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が生成されません。

5

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

public List<Integer> parent = new ArrayList<Integer>(); 
// etc. 
2

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

関連する問題