首页 > 解决方案 > 每个循环将 1 添加到数组索引

问题描述

所以,我正在解决一个问题,让我添加两个骰子“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

标签: javaarrays

解决方案


//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适合(前 2 个元素将保持未使用状态),要么简单地删除+1's:

    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();

推荐阅读