每个循环向数组索引加1

时间:2019-01-18 17:19:04

标签: java arrays

所以,我正在解决一个问题,即我将两个压模辊“ X”的次数相加,然后将频率记录在阵列中,这就是我所拥有的

int [] counters = new int [11];
    for (int i = 0; i <1001; i++){
        //have to add +1 so I don't get 0
        ++counters[((die1.nextInt(6)+1)+(die2.nextInt(6)+1))];
    }
    System.out.print(counters);

我收到此错误: java.lang.ArrayIndexOutOfBoundsException:12

2 个答案:

答案 0 :(得分:1)

//have to add +1 so I don't get 0

不,你真的不知道。

在Java中,数组基于0。表示由11个元素组成的数组的索引为0 .. 10

Random.nextInt(n)返回一个介于0n-1之间的值。

因此,表达式((die1.nextInt(6)+1)+(die2.nextInt(6)+1))将在2 .. 12之间。

或者将数组的大小增加到13,以使12合适(前两个元素将保持未使用状态),或者直接删除+1

    Random die1 = new Random(), die2 = new Random();
    int [] counters = new int [11];
    for (int i = 0; i <1001; i++){
        ++counters[die1.nextInt(6)+die2.nextInt(6)];
    }

此外,您不能使用print()打印数组。一种可能的解决方案是单独打印每个元素:

    for (int i = 0; i < counters.length; ++i) {
        System.out.print((i+1) + ":" + counters[i] + " ");
    }
    System.out.println();

答案 1 :(得分:0)

您有两个骰子,掷骰子的结果可以从0到5。我假设1001表示您要将两个骰子掷骰1001次。如果我错过了这里,请告诉我。

在这种情况下,最小掷骰数将为0,最大掷骰数为10。但是,在访问之前将两个骰子掷骰数加1意味着您的索引从2变为12,这会导致您的ArrayIndexOutOfBoundsException

仅添加任何内容。请记住,java数组从0开始,因此0到10的范围是可以的。

简单示例:

public static class Die {
    static Random rand = new Random();

    public static int nextInt(int val) {
        return rand.nextInt(val);
    }
}

public static void main(String[] args) {
    int[] counters = new int [11];
    for (int i = 0; i <1001; i++){
        //no need to add anything
        ++counters[Die.nextInt(6) + Die.nextInt(6)];
    }
    System.out.print(Arrays.toString(counters));
}

示例输出:

[27, 60, 81, 106, 157, 175, 120, 109, 81, 55, 30]

我们可以解释为“ 2”被滚动27次,“ 3”被滚动60次,等等。