Boa tarde usuários!
Poderiam, por gentileza, me ajudar a verificar meu código, fiz uma algoritmo para multiplicar duas matriz MxN.
Não é matriz quadrada NxN. Entretanto, quando executo o aplicativo ocorre os erros seguintes:
Exception in thread “main” java.lang.ArrayIndexOutOfBoundsException: 3
at matriz.multMatrix.multiplica(multMatrix.java:132)
at matriz.multMatrix.main(multMatrix.java:26)
Java Result: 1
Já mofifiquei tantas vezes meu método “multiplica” que já não enchergo mais o que pode ser.
package matriz;
import java.util.Scanner;
/**
*
* @author Leandro
*/
public class multMatrix {
public static int[][] multiplica (int mat1[][], int mat2[][], int linha, int coluna){
//int aux = 0;
int a[][] = new int[linha][coluna];
for (int i = 0; i < linha ; i++){
for (int j = 0; j < coluna ; j++){
a[i][j] = 0;
for (int h = 0; h < a.length; h++){
a[i][j]+= (mat1[i][h]*mat2[h][j]);
}
//a[i][j] = aux;
}
//aux = 0;
}
return a;
}
public static void main (String args[]){
int linMat1 = 0;
int linMat2 = 0;
int colMat1 = 1;
int colMat2 = 0;
//matriz 1 e 2
//verificando a propriedade da matriz NxN
while (colMat1 != linMat2){
//linhas matriz 1
System.out.println("Informe o número de linhas Matriz 1");
System.out.println("MATRIZ 1:");
Scanner t = new Scanner(System.in);
linMat1 = t.nextInt();
//colunas matriz 1
System.out.println("Informe o número de colunas Matriz 1");
System.out.println("MATRIZ 1:");
t = new Scanner(System.in);
colMat1 = t.nextInt();
//linhas matriz 2
System.out.println("Informe o número de linhas Matriz 2");
System.out.println("MATRIZ 2:");
t = new Scanner(System.in);
linMat2 = t.nextInt();
//colunas matriz 1
System.out.println("Informe o número de colunas Matriz 2");
System.out.println("MATRIZ 2:");
t = new Scanner(System.in);
colMat2 = t.nextInt();
if (colMat1 != linMat2) System.out.println ("(MATRIZ MxN) Número de colunas Matriz 1 deve ser igual número de linhas da Matriz 2!");
}
int matriz1[][] = new int[linMat1][colMat1];
int matriz2[][] = new int[linMat2][colMat2];
int matrizResult[][] = new int[linMat2][colMat1];
//populando as matrizes
for (int i = 0; i < linMat1 ; i++){
for (int j = 0; j < colMat1 ; j++){
matriz1[i][j] = (int) (Math.random() * linMat1 * 100);
}
}
for (int i = 0; i < linMat2 ; i++){
for (int j = 0; j < colMat2 ; j++){
matriz2[i][j] = (int) (Math.random() * linMat2 * 100);
}
}
//mostrando as matrizes
int cont1 = 0;
System.out.println("Matriz 1:");
for (int i = 0; i < linMat1 ; i++){
for (int j = 0; j < colMat1 ; j++){
System.out.print(matriz1[i][j] + " ");
cont1++;//para deixar mais organizada a matriz
if (cont1 == colMat1){
cont1 = 0;
System.out.println();
}
}
}
System.out.println();
System.out.println("Matriz 2:");
int cont2 = 0;
for (int i = 0; i < linMat2 ; i++){
for (int j = 0; j < colMat2 ; j++){
System.out.print(matriz2[i][j] + " ");
cont2++;//para deixar mais organizada a matriz
if (cont2 == colMat2){
cont2 = 0;
System.out.println();
}
}
}
System.out.println();
//invocando o método para multiplicar as matrizes e mostrando o resultado.
System.out.println("Matriz Resultante:");
int cont = 0;
//imprimindo a matriz resultante
matrizResult = multiplica (matriz1, matriz2, linMat1, colMat2);
for (int i = 0; i < linMat2 ; i++){
for (int j = 0; j < colMat1 ; j++){
System.out.print(matrizResult[i][j] + " ");
cont++;//para deixar mais organizada a matriz
if (cont == 5){
cont = 0;
System.out.println();
}
}
}
}
}
Obrigado.