所以,我正在解决一个问题,即我将两个压模辊“ 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
答案 0 :(得分:1)
//have to add +1 so I don't get 0
不,你真的不知道。
在Java中,数组基于0。表示由11个元素组成的数组的索引为0
.. 10
。
Random.nextInt(n)
返回一个介于0
和n-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次,等等。