Matriz MxN

2 respostas
L

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.

2 Respostas

Andre_Fonseca

leandropaz:
Boa tarde usuários!

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.

Obrigado.

oi,

não vou te dar a solução mas vou dar uma dica de como você mesmo pode achar o problema

essa exceção diz claramente que na linha 132 da sua classe multMatrix você está tentando acessar uma posição do array que não existe

então faz o seguinte: coloca um break-point na sua IDE (eclipse, netbeans, etc) e vai debugando até chegar a esta linha e veja porque este erro está acontecendo, você pode ter criado o vetor com tamanho incorreto ou então está com problemas na hora de fazer o loop

se não sabe como fazer o debug ou então não usa IDE então faça um System.out.println dos valores mesmo, já vai te ajudar

abs

leonardofl

Bom, na verdade nem vi o código, mas como o erro é o array out of bounds vai aqui um chute: lembre-se: não se pode multiplica duas matrizes quaisqueres… uma matriz mxn deve ser multiplicada por uma matriz nxm

Criado 14 de agosto de 2010
Ultima resposta 14 de ago. de 2010
Respostas 2
Participantes 3