2011-01-15 5 views
0
public class Hobbits { 
String name; 

public static void main(String[] args){ 

    Hobbits [] h = new Hobbits[3]; 
    int z = 0; 

    while (z<4) { 
    z = z + 1; 
    h[z] = new Hobbits(); 
    h[z].name = "Bilbo"; 
    if (z == 1) { 
    h[z].name = "Frodo"; 
    } 
    if (z == 2){ 
    h[z].name = "Sam"; 
    } 
    System.out.print(h[z].name+ " is a "); 
    System.out.println("good Hobbit name"); 

    } 
} 
} 

エラー:のJavaプログラムの実行時実行時に、このプログラムが例外を与えている

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException 
+3

いくつかの例外はありますか?さて、何かが間違っています。 :)(ヒント:もっと具体的に) –

+0

こんにちは。ここに例外を貼り付けることはできますか?スレッド「メイン」java.lang.ArrayIndexOutOfBoundsExceptionで – dave

+1

例外:3 フロドはサムがHobbits.mainで良いホビット名 \tで良いホビット名 です(Hobbits.java:12) – Sam

答えて

1

私はあなたがはIndexOutOfBoundsExceptionを得ていると思います - そしてそれは、[z]は、インスタンス時間を作成する前に、Zをインクリメントしているため。 ループの最後にちょうど増分。

+0

ループの最後にzを増やしても、まだ例外が表示されています.Bilboは良いホビット名です Frodoは良いホビット名です サムは良いホビット名です スレッド "main" java.langの例外です。ArrayIndexOutOfBoundsException:3 \t Hobbits.main(Hobbits.java:11)​​ – Sam

+1

ofcourseでwhileループ条件をz <3に変更します。 – Noray

+0

いいえ、あなたの配列の長さは3で、インデックスは0,1,2という意味です。だから、zは3に達しません。 – dm76

3

コメントに同意すると、より具体的なはずですが、ループを1から3まで実行し、配列の長さは3にすぎないことがわかります(利用可能な最高のインデックスは2)。

+0

私は感謝しています.... – Sam

2

Hは、h[0],h[1]およびh[2]である。あなたはそこにh[3]を求めています:)

2

あなたの配列は3です。

1:配列のインデックスは0

2で起動します。

while (z<4) { 
     z = z + 1; 
     h[z] = new Hobbits(); 
     ... 
} 
0

例外が原因で添字エラーのですが、2:あなたの配列で最も高いときあなたのコードは、インデックス4に上がりますそのようなクラスを持つことのポイントは何ですか?
私は、1つまたは2つのコンストラクタといくつかのアクセサといくつかのミューテータを持つHobbitクラスを持つ方が良い方法だと思います。それから、メインやTryHobbitクラスのいずれかを追加して、そのトリックを配列などで追加するのが理にかなっています。これは、よりクリーンな学習の例を提供します。

1

は、あなたの興味のためにwhileループ

+1

これは解決しませんなぜなら、コードは依然として限界を超えているため、インデックス3に行くからです。 – jzd

+0

正しいですが、最後にsysoutが例外をスローします。 [z-1]にも変換する必要があります – fmucar

1

の最後にz = z + 1;を移動する必要があり、短いバージョンは、次のようになります。

String[] names = "Bilbo,Frodo,Sam".split(","); 
Hobbits[] h = new Hobbits[names.length]; 
for(int i=0;i<names.length;i++) { 
    h[i] = new Hobbits(); 
    h[i].name = names[i]; 
    System.out.print(h[i].name+ " is a good Hobbit name"); 
} 

クラスホビットは冗長で、同じ出力を得ることができます。

for(String name: "Bilbo,Frodo,Sam".split(",")) 
    System.out.print(name+ " is a good Hobbit name"); 
0

に、whileループの条件はこれを試してみて、それが動作するはずループ

  • 変更の末尾に移動z=z+1

    int z = -1 
    while (z < 2) 
    
  • 関連する問題