2013-05-25 395 views
-1
public static void sumrowsandcols(int[][] a) { 

    int[] sum = new int[5]; 
    int i, j, x; 
    // Sum of rows 
    for (i = 0; i < 5; i++) { 
     for (j = 0; j < 5; j++) { 
      sum[i] += a[i][j]; 
     } 
    } 
    for (x = 0; x < 5; x++) { 
     System.out.println(sum[x]); 
    } 

    // Sum of columns 
    for (i = 0; i < 5; i++) { 
     for (j = 0; j < 5; j++) { 
      sum[i] += a[j][i]; 
     } 
    } 

    for (x = 0; x < 5; x++) { 
     System.out.println(sum[x]); 
    } 
    } 


    public static int[][] generateArray(Scanner myScanner) { 

    int numbers[][] = new int[5][5]; 
    int i, j, x; 
    for (i = 0; i < 5; i++) 
     System.out.println("Please enter 5 integers for row " + (i+1));  
     for (x = 0; x < 5; x++) { 
     j = myScanner.nextInt(); 
     numbers[i][x] = j; 
     } 
     return numbers; 
    } 

    // Main method. Collection happens, then calls sumrowsandcols. 

    public static void main(String[] args) { 

    int i, j, x; 
    Scanner myScanner = new Scanner(System.in);  
    int[][] numbers = generateArray(myScanner); 

    // Collect information by row   


    // Print sum of rows and columns 
    sumrowsandcols(numbers);  
    } 
+2

看看堆棧跟蹤。找到發生異常的行並指出該代碼的哪一行。瞭解發生異常的位置將有助於人們弄清楚爲什麼會發生這種情況。 – cmbaxter

+0

我找不到錯誤,但是'Sum of columns'註釋中的代碼看起來可疑...... – RMalke

回答

2

本聲明

for (i = 0; i < 5; i++) 
    System.out.println("Please enter 5 integers for row " + (i + 1)); 

終止隨後for循環之前。其結果i已超過上限列數組索引的調用語句

numbers[i][x] = j; 

時。結果是ArrayIndexOutOfBoundsException。這就是爲什麼使用大括號來限制for循環中的作用域的原因。同時聲明變量在for環本身表明,他們是在範圍:

for (int i = 0; i < 5; i++) { 
    System.out.println("Please enter 5 integers for row " + (i + 1)); 
     for (int x = 0; x < 5; x++) { 
     j = myScanner.nextInt(); 
     numbers[i][x] = j; 
     } 
} 
+0

正確,您希望將for循環放在大括號中。 – Tap

+0

如果我已經在循環中聲明瞭var,而不是在循環之前,可能會更加明顯。 – cmbaxter

+0

同意,如果變量超出範圍,會導致編譯器抱怨 – Reimeus

1

當你寫

for (i = 0; i < 5; i++) 
    System.out.println("Please enter 5 integers for row " + (i+1));  ' 

這一次全部打印出statemnt和其他環路打印後執行5次。在for循環之後加上大括號將它分組。

public static int[][] generateArray(Scanner myScanner) { 

    int numbers[][] = new int[5][5]; 
    int i, j, x; 
    for (i = 0; i < 5; i++){ 
     System.out.println("Please enter 5 integers for row " + (i + 1)); 
    for (x = 0; x < 5; x++) { 
     j = myScanner.nextInt(); 
     numbers[i][x] = j; 
    } 
    } 
    return numbers; 
} 
+0

狗屎我錯了,沒有注意到,對不起 –

+0

@DanN。這是一個非常普遍的錯誤。當你使用for循環時,總是要把它放在花括號裏。 – Adarsh

相關問題