使用骰子程序的2D数组中的界外错误

时间:2013-12-06 15:02:26

标签: java arrays matrix indexoutofboundsexception dice

所以我创建了一个程序,用y方向滚动z次x次,并且我在第一个for循环的第一行继续得到一个越界错误。但是我不确定为什么会这样,循环计数从0到(z-1)。我基本上处于这个程序的主页,我需要stackoverflow社区的帮助。

public class Ass11f {

    public static void main(String[] args) {
        EasyReader console = new EasyReader();
        System.out.print("Enter how many times you want to roll the die: "); 
        int x = console.readInt();
        System.out.print("Enter the amount of sides: ");
        int y = console.readInt();          
        System.out.print("Enter the amount of die: ");
        int z = console.readInt();      
        int[][] dice = new int[x][z];
        int row = 0;
        for (int i = 0; i<z; ++i){
             dice[row][i] += ((int)(Math.random()*y)+1);
             if ((i == z-1)&&(row!=x)) {
                i = 0;
                ++row;
             }
        }     
        row = 0;
        int[] sum = new int[x];
        for (int j = 0; j<z; ++j){
            sum[row]+=dice[j][row];
            if ((j == z-1)&&(row!=x)) {
                j = 0;
                ++row;          
            }
        }                                                                                                                                                                                           
        int[] counter = new int[2*y];
        int k = 0;
        while (k<sum.length){
            for (int l = 0;l<((2*y)-1);++l){
                if (sum[k]==l) ++counter[l];
                if (l==((2*y)-1)) {
                    ++k;
                }
            }
        }   
        for (int m = 0;m<sum.length;++m) System.out.println(sum[m]+"'s: "+counter[m]+"times, "+((((double)counter[m])/x)*100)+"%");                                                   
    }
}

2 个答案:

答案 0 :(得分:0)

第一个循环:

for (int i = 0; i<z; i++){
  dice[row][i] += ((int)(Math.random()*y)+1);
  if ((i == z-1)&&(row!=x-1)) {
    i = -1;
    ++row;
  }
}

第二个循环:

for (int j = 0; j<z; j++){
  sum[row]+=dice[j][row];
  if ((j == z-1)&&(row!=x-1)) {
    j = -1;
    ++row;          
  }
} 

第三循环:永远运行。我不确定这是为了实现这个目标,所以我无法为你解决这个问题......

答案 1 :(得分:0)

有x行,但您使用z作为行循环

int[][] dice = new int[x][z]; <-- x is the row count
int row = 0; 

for (int i = 0; i < z; ++i){  <--- The outer loop is iterating the rows (x), 

以下是迭代2D数组的方法

int[][] dice = new int[x][z];

for (int i = 0; i < x; i++){
   for (int j = 0; j < z; j++){
      // do something with dice[i][j]
   }
}