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

嗨,人们刚接触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); } } 

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

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

无论如何,如果你想完全填充数组,你需要两个for -loops:

 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循环遍历2Darraysgrid包含的所有1Darrays,而内部for循环用随机值填充这些内部1Darrays中的每一个。

哦,还有最后一件事。 计算总和时,在最里面的循环中,你有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; 

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