3

大家好,Java 新手,进展缓慢。在添加行和列之前,我试图用随机数填充二维数组。到目前为止,我可以创建数组并显示它,并且我很确定我已经对添加位进行了排序。但是当我尝试用随机数填充它时,我得到了一个 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);
    }
}
4

1 回答 1

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

这将是一个越界异常。数组的最大索引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);
    }
}

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

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

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

int sum = 0;

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

它稍微不那么冗长,也许更清晰。

于 2013-09-17T01:07:39.827 回答