2014-04-04 3 views
1

두 행렬을 추가하려고하는데 컴파일러가 sum 메소드를 호출하려고 할 때 예외가 발생합니다.자바에서 두 개의 행렬 추가

public static void main(String[] args) { 

    int[][] a = new int[3][3]; 
    int[][] b = new int[3][3]; 

    for (int i = 0; i < a.length; i++) 
    { 
     for (int j = 0; j < a[0].length; j++) 
     { 
      a[i][j] = Integer.parseInt(JOptionPane.showInputDialog("Enter a[" + i + "][" + j + "]")); 
     } 
    } 
    for (int i = 0; i < b.length; i++) 
    { 
     for (int j = 0; j < b[0].length; j++) 
     { 
      b[i][j] = Integer.parseInt(JOptionPane.showInputDialog("Enter b[" + i + "][" + j + "]")); 
     } 
    } 

다음 행에서 예외가 발생합니다.

int[][] c = sum(a,b); 

    for (int[] row: c) 
    { 
     for (int e: row) 
     { 
      System.out.print(e + "\t"); 
     } 
    } 

} 
public static int[][] sum(int[][] a, int[][] b) 
{ 
    int[][] c = new int[a.length][a[0].length]; 

    for (int i = 0; i < a.length; i++) 
    { 
     for (int j = 0; i < a[i].length; j++) 
      c[i][j] = a[i][j] + b[i][j]; 
    } 
    return c; 
} 

아무도 도와 드릴 수 있습니까?

+5

예외 (스택 추적)는 읽어야했습니다. – keyser

+0

예외는 무엇입니까? 스택 추적이 도움이됩니다. –

답변

5

당신은 당신의 내부 루프에 오타가 있습니다

for (int j = 0; i < a[i].length; j++)

for (int j = 0; j < a[i].length; j++) 

하고 j이 배열의 크기를 넘어 년부터 ArrayIndexOutOfBoundsException가 발생한다.

예외가 발생하면 가장 먼저 보는 것은 예외의 이름입니다. 종종 매우 유익합니다. 이 경우 우연히 너무 멀리 반복되었음을 알려줍니다. 이름이 유익하지 않은 경우 오류가 발생한 위치를 알 수 있습니다. 스택 추적에는 오류가 발생한 행이 포함됩니다. 이러한 것들이 도움이되거나 존재하지 않는다면 디버거를 사용하거나 디버그 메시지를 프린트하여 문제를 진단 할 수 있습니다.

+0

고맙습니다. 도움이 된 –

관련 문제