2017-04-19 1 views
0

Voici deux méthodes qui permettraient de multiplier deux tableaux 1D, chacun contenant cinq entiers, et d'afficher le tableau 2-D (5x5) résultant. Malheureusement, je n'obtiens pas le résultat que j'espère en obtenant une exception ArrayIndexOutOfBoundsException. Je suis allé sur mon code pour rechercher le bogue mais je n'arrive pas à trouver l'erreur. Le message d'erreur indique également que l'erreur se produit à l'instruction mult[i][j] = array1[i]*array2[j];.Opérations matricielles avec tableaux 1D

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

Présentez un [mcve] si vous voulez une réponse. Mon meilleur * guess *, cependant, serait que soit 'array1' est plus court que' imax' ou 'array2' est plus court que' jmax'. Il est en tout cas un peu étrange que vous utilisiez des variables d'instance, car les tableaux Java connaissent leurs propres longueurs. –

+0

Ouais, débarrassez-vous des variables d'instance et utilisez la longueur des tableaux –

+1

En outre, votre code pourrait être rendu beaucoup plus clair en utilisant les boucles 'for' au lieu des boucles' while'. –

Répondre

1

Vous devez briser la boucle intérieure quand j == jmax-1, sinon la prochaine itération i deviendra 5 qui vous donnera ArrayIndexOutOfBoundsException.

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