2013-09-17 2 views
3

Привет, новые люди, знакомые с Java, и делаю медленный прогресс. Я пытаюсь заполнить 2D-массив случайными числами, прежде чем добавлять строки и столбцы. Пока я могу создать массив, отобразить его, и я уверен, что бит бит добавления отсортирован. Но я получаю outofboundsexception, когда я пытаюсь заполнить его случайными числами. Где я иду не так?Заполнение случайных чисел в 2D-массиве для добавления столбца/строки

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); 
    } 
} 

ответ

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

Это будет исключением вне границ. Максимальный индекс массива a - a.length - 1 (поскольку массивы индексируются 0) - вы пытаетесь получить доступ к индексу a.length. Здесь a - grid[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 -loop перебирает всех 1D массивов, содержащихся в 2D массива grid , а внутренний for -loop заполняет каждый из этих внутренних 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; 

Это немного компактнее и, возможно, более разборчивыми ,

+0

Argh! Конечно ... это имеет смысл. Большое спасибо за Вашу помощь. – Bmc

+0

@Bmc Без проблем, рад, что я мог бы помочь. Не забудьте [принять ответ] (http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work/5235#5235). – arshajii

Смежные вопросы