2016-07-07 12 views
0
String[] lvl15={"Twin", "Flank Guard", "Sniper", "Machine Gun"}; 
    String[] lvl30={"", "Triple Shot", "Quad Tank", "Twin Flank", "Tri-Angle", "Assasin", "Overseer", "Hunter", "Destroyer", "Gunner", ""}; 
    String[] lvl45={"Triplet", "Penta Shot", "Octo Tank", "Triple Twin", "Overlord", "Necromancer"}; 

    int index15; 
    int index30; 
    int index45; 

    index15=rand.nextInt(lvl15.length); 
    switch(index15){ 
     case 0: class15="Twin"; 
      break; 
     case 1: class15="Flank Guard"; 
      break; 
     case 2: class15="Sniper"; 
      break; 
     case 3: class15="Machine Gun"; 
      break; 
    } 

    if(class15=="Twin"){index30=rand.nextInt(3)+1; class30=lvl30[index30];} 
    if(class15=="Flank Guard"){index30=rand.nextInt(4)+2; class30=lvl30[index30];} 
    if(class15=="Sniper"){index30=rand.nextInt(7)+5; class30=lvl30[index30];} 
    if(class15=="Machine Gun"){index30=rand.nextInt(9)+8; class30=lvl30[index30];} 

コードがあります。何らかの理由で、それはそうなので、これはウェイライン54によって理由もなくあるように時々 ランダマイザーが機能しなくなり、エラーが発生する

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 11 
    at diepiogen.DiepIOGen.main(DiepIOGen.java:54) 
    C:\Users\******\AppData\Local\NetBeans\Cache\8.1\executor-snippets\run.xml:53: Java returned: 1 
    BUILD FAILED (total time: 0 seconds) 

だから、誰かがあれば(class15 ==「スナイパー」){index30 =ランドが助けてくださいすることができます。このエラーを思い付きます.nextInt(7)+5; class30 = lvl30 [index30];}

これで、フィラーを追加するだけです。

+1

配列のサイズは11で、インデックスは0から10になります...エラーは、存在しないインデックス「11」を使用していることを示します。 – sinclair

+3

'if(class15 ==" Twin ")' [Javaで文字列を比較するには?](http://stackoverflow.com/questions/513832/how-do-i-compare-strings-in-java) - コンパイル時に知られている文字列リテラルを比較しているので、この部分がうまくいくかもしれませんが、実際には '=='を使って文字列を比較するのをやめてください(特に、作成した文字列実行時に)。 – Pshemo

+0

クラスの乱数生成で配列の範囲を超えています – Li357

答えて

0

rand.nextInt(7)からの計算結果は0から6の間になりますので、6を得て5を追加すると無作為に11になります。配列の要素は11ですが、11番目のインデックスは10です。 したがって、コードを変更してください index30=rand.nextInt(7)+5 からindex30=rand.nextInt(7)+4 配列インデックスは範囲外です。 Javaのドキュメントを参照してください。http://docs.oracle.com/javase/6/docs/api/java/util/Random.html#nextInt()

+0

3-6のような範囲で数値を生成させるにはどうすればよいですか? – mobinblack

+0

'rand.nextInt(7)'とif文です。 'int random = rand.nextInt(7); if(random <4)random = rand.nextInt(7); '...これは、確率が低すぎる場合に最適な解ではありません。それ以上の 'rand.nextInt(4)+ 3'でも良いですが、どちらが包含的で排他的であるか考える必要があります – BigBugNoob

0

インデックスが配列の範囲外にあります。 javaドキュメント:http://docs.oracle.com/javase/6/docs/api/java/util/Random.html#nextInt() nextInt(n)は0からn排他(0からn-1までを意味する)の境界の間で新しい整数を取得することが示されています。あなたが作ったリスト(lvl30)は11個のエントリを持っていますので、0から6の間のintに5を加えると、時には範囲外の11が得られます。

関連する問題