2009-06-05 10 views
0

は私のコードです:このコードが実行されるときなぜこのforループでNullPointerExceptionが発生しますか?ここ

Comic[] comix = new Comic[3]; 
comix[0] = new Comic("The Amazing Spider-man","A-1","Very Fine",9240.00F); 
comix[0].setPrice((Float)quality.get(comix[0].condition)); 
for(int i=0;i<comix.length;i++){ 
    System.out.println("Title: " + comix[i].title); 
} 

は、なぜ私はNullPointerExceptionが取得していますか?

答えて

12

あなただけcomix[0]の値を設定しているが、あなたはcomix.lengthとして、同様のループでcomix[1] .TITLEとcomix[2] .TITLEを取得しているが参照型の配列の各要素のデフォルト値は3です。 null。長さは、配列全体の長さであり、「配置された」要素だけではありません。

最もよく使用される実装はArrayList<T>で、List<T>です。

+0

7票 - 悪くない、まったく。 –

+1

Jonがどのくらい速く(そしてうまく)Jonが質問に答えるかを説明する唯一のものは、最初に質問をするために大量のaltsを作成している場合です:D –

3

あなただけのコミックスの内側にあるものを定義しましたので、[0]、[1]やコミックスをCOMIXないあなただけの3つのオブジェクトの最初の割り当て、次にに関するすべての情報を表示しているように[2]

2

が見えます三?

2

forループは3回繰り返されるため、配列のサイズは3です。配列が3つの要素で満たされているかどうかは関係ありませんが、サイズは3です。

1

comix [1] .titleとcomix [2] .titleがnullです。 null文字列をprintlnすることはできません。

2

まあ、あなたは3つのインスタンスのComicに合った配列を宣言しました。あなたは1つしか持っていません。ですから、ループの2番目の反復では、comix [1] .titleはNPEをスローするようにcomix [1]がnullです。

1

comixはnew Comic[3]と定義されています。したがって、Javaがループを3回通過することが期待されます。 2回目の反復では、comix[1]にタイトルはありません。

+0

実際にはComicはありません... – Chochos

1

あなたはこのように行う場合は、エラーを取得することはありません:2分で

Comic[] comix = new Comic[3];  

for(int i=0; i<comix.length; i++){ 

    comix[i] = new Comic[i]; 

    comix[i] = new Comic("The Amazing Spider-man","A-1","Very Fine",9240.00F); 

    comix[i].setPrice((Float)quality.get(comix[0].condition)); 

    System.out.println("Title: " + comix[i].title); 
} 
関連する問題