2017-04-19 1 views
0

두 개의 1-D 배열에 각각 5 개의 정수를 곱하고 그 결과 2-D (5x5) 배열을 표시하는 두 가지 방법이 있습니다. 불행히도, 나는 ArrayIndexOutOfBoundsException을 얻을 때 내가 바라는 결과를 얻지 못한다. 버그를 찾기 위해 코드를 살펴 봤지만 오류를 찾을 수 없습니다. 또한 오류 메시지는 mult[i][j] = array1[i]*array2[j]; 문에서 오류가 발생했음을 나타냅니다.1-D 배열을 사용한 행렬 연산

public static int [][] matrixMult(int [] array1, int [] array2){ 

    int [][] mult = new int [imax][jmax]; 
    int i = 0; 
    int j = 0; 

    while(i < imax){ 
     while(j < jmax){ 

      mult[i][j] = array1[i]*array2[j]; 

      if(j == jmax-1){ 

       i++; 
       j = 0; 

      }else{ 

       j++; 
      } 
     } 
    } 

    return mult; 
} 

public static void print2DArray(int array[][]){ 

    int i = 0; 
    int j = 0; 

    while(i < imax){ 
     while(j < jmax){ 

      System.out.print("(" + i + ", " + j + ") " + array[i][j]); 

      if(j == jmax-1){ 

       i++; 
       j = 0; 

      }else{ 

       j++; 
      } 

     } 
    } 
} 
+0

대답을 원한다면 [mcve]를 제시하십시오. 그러나 가장 좋은 추측 *은'array1'이'imax'보다 짧거나'array2'가'jmax'보다 짧을 것입니다. 자바 배열은 자신의 길이를 알고 있기 때문에 어떤 경우에는 인스턴스 변수에 의존하는 것이 약간 이상합니다. –

+0

그래, 인스턴스 변수를 없애고 배열의 길이를 사용한다 –

+1

또한 while 루프 대신'for' 루프를 사용하면 코드를 훨씬 명확하게 만들 수있다. –

답변

1

당신은 당신이는 ArrayIndexOutOfBoundsException 줄 것이다 5가 될 것이다, 그렇지 않으면 다음 반복 i에서, 내부 루프 j == jmax-1을 중단해야한다.

if(j == jmax-1){ 
    i++; 
    j = 0; 
    break; //exit the inner loop 
}else{ 
    j++; 
}