2012-01-24 6 views
-4

ここに私のコードがあります。そのポイントは、5行4列の2次元配列に1から10の20個の数字をランダムに入力するプログラムを書くことです。プログラムは、2次元配列、各行と各列の合計の合計を出力する必要があります。ArrayOutOfBoundsExceptionのソースは何ですか?

Project 3... 
2D Array elements: 6, 6, 7, 10, 4, 4, 0, 9, 0, 1, 3, 10, 1, 10, 10, 9, 10, 5, 8, 2, 
Sum of Rows: 115 
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 4 
    at arrayProject.projectthree(arrayProject.java:96) 
    at arrayProject.main(arrayProject.java:19) 
ここ

は私のコードです::このループで

public static void projectthree(){ 
    System.out.println("Project 3..."); 
    /*Write a program that randomly inputs 20 numbers from 1 to 10 into a 2-D array of 5 rows and 4 columns. 
    The program should output the 2-D array, the sum of each row storing numbers in a parallel array and 
    the sum of each column storing numbers in a parallel array*/ 
    int array[][] = new int[5][4]; 
    Random randomizer = new Random(); 
    for (int i = 0; i < array.length; i++){ 
     for (int j = 0; j < array[i].length; j++){ 
      array[i][j] = randomizer.nextInt(11); //Assign random values to each element in the array 
     } 
    } 
    System.out.print("2D Array elements: "); 
    for (int i = 0; i < array.length; i++){ 
     for (int j = 0; j < array[i].length; j++){ 
      System.out.print(" " +array[i][j]+ ","); //Output 2D Array 
     } 
    } 

    int[] sumOfRows = new int[array.length]; 
    int[] sumOfColumns = new int[array[0].length]; 

    int sumR = 0; 
    int sumC = 0; 
    for(int row = 0; row < array.length; row++){ 
     for(int col = 0; col < array[0].length; col++){  //Sum of rows 
     sumR += array[row][col]; 
     } 
    sumOfRows[row] = sumR; 
    } 
    System.out.println(" "); 
    System.out.println("Sum of Rows: " + sumR); 


    for(int col = 0; col < array.length; col++){ 
     for(int row = 0; row < array[0].length; row++){ 
      sumC += array[row][col]; 
      } 
    sumOfColumns[col] = sumC; 
    } 
    System.out.println("Sum of Columns:" + sumC); 

} 
+1

デバッグを試しましたか? – BNL

+1

どの行が '96'行ですか? – paislee

+0

私のためにうまく動作します。しかし、最後のforループでは、array [0] .lengthの代わりにarray [row] .lengthが必要ですか? –

答えて

4

ルック:

for(int col = 0; col < array.length; col++){ 
    for(int row = 0; row < array[0].length; row++){ 
     sumC += array[row][col]; 
     } 
私は(ここでは私の総出力があります)この例外を得ているところ私が把握することはできません

array[row][col]にアクセスしていますが、array[col][row]にアクセスしているか、ルーピングの方法を変更する必要があります。働いているすべての他の人とこのループの比較:

for (int i = 0; i < array.length; i++){ 
    for (int j = 0; j < array[i].length; j++){ 
     System.out.print(" " +array[i][j]+ ","); 
    } 
} 

注意をどのように、ここで0からarray.length - 1i実行され、表現array[i][j]におけるインデックスの最初のビットとして使用されています。

+0

あなたのために別のノー・リップupvoteがあります! – BNL

0

あなたは 問題がループの最後の入れ子になっている...かなり簡単に自分でこれをデバッグすることができるはず...

あなたはsumC += array[row][col];、 を言うが、あなたの行変数はの内側に宣言されていますループするには、それを

に変更する必要があります
sumC += array[col][row]; 
関連する問題