Randomizer无法正常工作并导致错误

时间:2016-07-07 16:26:54

标签: java

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

有我的代码。出于某种原因,它有时会出现此错误

    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)

所以有人可以请求帮助,因为似乎没有理由通过第54行的方式(class15 ==" Sniper"){index30 = rand.nextInt(7)+5; class30 = lvl30 [index30];}

现在我只是添加填充物,因为否则我不能发布它。

2 个答案:

答案 0 :(得分:0)

rand.nextInt(7)的数学结果将在0-6之间,所以当你得到6并且加5时,你会有11个。你的数组有11个元素,但第11个数据的索引是10。 所以,改变代码 来自index30=rand.nextInt(7)+5index30=rand.nextInt(7)+4 Array索引超出了边界。请参阅java文档:http://docs.oracle.com/javase/6/docs/api/java/util/Random.html#nextInt()

答案 1 :(得分:0)

您的索引超出了数组的范围。 来自java文档:http://docs.oracle.com/javase/6/docs/api/java/util/Random.html#nextInt() 表明nextInt(n)将在0到0的范围内得到一个新的整数(n从0到n-1)。你所做的列表(lvl30)有11个条目,所以如果你在0和0之间的一个int加5 6有时你会得到11,这是超出界限。