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

Bmc*_*Bmc 2 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);
    }
}
Run Code Online (Sandbox Code Playgroud)

ars*_*jii 7

grid[i][grid[i].length] = (int)(Math.random()*10);
Run Code Online (Sandbox Code Playgroud)

这将是一个超出范围的例外.数组的最大索引aa.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);
    }
}
Run Code Online (Sandbox Code Playgroud)

for循环遍历2D阵列中包含的所有1D阵列grid,并且内循环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;
Run Code Online (Sandbox Code Playgroud)

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