在2D数组中填充随机数以添加列/行

时间:2013-09-17 01:03:54

标签: java arrays random fill

嗨,人们对Java不熟悉并且进展缓慢。我在添加行和列之前尝试使用随机数填充2D数组。到目前为止,我可以创建数组,显示它,我很确定我有添加位排序。但是当我尝试用随机数填充它时,我得到了一个outofboundsexception。我哪里错了?

public static void main(String[] args)
{
    //create the grid
    final int row = 9;
    final int col = 9;
    int [][] grid = new int [row][col];

    //fill the grid
    for (int i=0; i<grid.length; i++)
    grid[i][grid[i].length] = (int)(Math.random()*10);

    //display output
    for(int i=0;i<grid.length; i++)
    {
        for(int j=0; j<grid[i].length; j++)
        System.out.print(grid[i][j]+"");
        System.out.println();
    }

    int sum = 0;
    for (int i = 0; i < grid.length; i++) {
        System.out.println("This row sums up to: " + sum);


        for (int j = 0; j < grid[i].length; j++) {
            sum += grid[j][i];
        }
        System.out.println("This column sums up to: " + sum);
    }
}

1 个答案:

答案 0 :(得分:7)

grid[i][grid[i].length] = (int)(Math.random()*10);

这将是一个超出范围的例外。数组a的最大索引是a.length - 1(因为数组是0索引的) - 您正在尝试访问a.length的索引。此处agrid[i]

在任何情况下,如果你想完全填充数组,你需要两个for - 循环:

for (int i = 0; i < grid.length; i++) {
    for (int j = 0; j < grid[i].length; j++) {
        grid[i][j] = (int)(Math.random()*10);
    }
}

外部for - 循环遍历2D数组grid中包含的所有1D数组,内部for - 循环用随机值填充这些内部1D数组中的每一个

哦,还有最后一件事。计算总和时,在最里面的循环中,您有sum += grid[j][i]。您可能希望i为数组索引,j为索引i处数组的元素索引,即grid[i][j]

另请注意,如果您没有写入数组(例如打印或查找总和),您也可以使用Java的增强型for循环:

int sum = 0;

for (int[] row : grid)
    for (int n : row)
        sum += n;

它略显冗长,也许更清晰。