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)
grid[i][grid[i].length] = (int)(Math.random()*10);
Run Code Online (Sandbox Code Playgroud)
这将是一个超出范围的例外.数组的最大索引a
是a.length - 1
(因为数组是0索引的) - 您正在尝试访问索引a.length
.这a
是grid[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)
它略显冗长,也许更清晰.