TransWikia.com

Soma de 3 matrizes em uma nova matriz

Stack Overflow em Português Asked by boltJu on October 8, 2020

Preciso de um programa que some 3 matrizes de tamanho NxM. O usuário deve poder definir o tamanho (NxM) das matrizes. Porém não sei o que há de errado.

Java
        int linha = i;
        int coluna = j;
        int[][] matriz = new int[linha][coluna];
        int linha2 = i;
        int coluna2 = j;
        int[][] matriz2 = new int[linha2][coluna2];
        int linha3 = i;
        int coluna3 = j;
        int[][] matriz3 = new int[linha3][coluna3];

        Scanner input = new Scanner(System.in);
            //Definindo o tamanho (linha e coluna)
        System.out.print("Digite o tamanho da primeira matriz:n ");
            matriz[linha][coluna]= input.nextInt();
        System.out.print("Digite o tamanho da segunda matriz:n ");
            matriz2[linha2][coluna2] = input.nextInt();
        System.out.print("Digite o tamanho da terceira matriz:n ");
            matriz3[linha3][coluna3] = input.nextInt();

        //Soma das 3 matrizes em uma nova matriz
        int[][] matrizR = new int[i][j];
        for(i = 0; i < matriz.length; i++)
        for(j = 0; j < matriz2.length; j++)
        for(k = 0; k < matriz3.length; k++)
        matrizR[i][j] = matriz[i][j] + matriz2[i][j] + matriz3[i][j];

2 Answers

Você só pode somar matrizes do mesmo tamanho. Se você tem uma matriz M x N (com M linhas e N colunas), só pode somá-la com outra matriz M x N, e o resultado será outra matriz M x N. Ou seja, não faz sentido ler o tamanho das 3 matrizes, pois o usuário pode digitar tamanhos diferentes para cada uma. O que você tem que fazer é ler o tamanho uma vez só, e depois criar as 3 matrizes (e mais a matriz que guarda o resultado da soma) com o mesmo tamanho.

Além disso, você tem que ler a quantidade de linhas e de colunas, separadamente. E você só cria as matrizes depois de ler esses dados:

// primeiro lê os dados
Scanner input = new Scanner(System.in);
System.out.print("Digite a quantidade de linhas das matrizes: ");
int qtdLinhas = input.nextInt();
System.out.print("Digite a quantidade de colunas das matrizes: ");
int qtdColunas = input.nextInt();

// depois cria as matrizes
int[][] matriz1 = new int[qtdLinhas][qtdColunas];
int[][] matriz2 = new int[qtdLinhas][qtdColunas];
int[][] matriz3 = new int[qtdLinhas][qtdColunas];
int[][] resultado = new int[qtdLinhas][qtdColunas];

Uma vez criadas as matrizes, você ainda precisa preencher os valores das mesmas. Uma forma de fazer é:

System.out.println("Lendo dados da matriz 1:");
for (int i = 0; i < matriz1.length; i++) {
    for (int j = 0; j < matriz1[i].length; j++) {
        System.out.printf("Digite o elemento da posição [%d, %d]: ", i, j);
        matriz1[i][j] = input.nextInt();
    }
}
System.out.println("Lendo dados da matriz 2:");
for (int i = 0; i < matriz2.length; i++) {
    for (int j = 0; j < matriz2[i].length; j++) {
        System.out.printf("Digite o elemento da posição [%d, %d]: ", i, j);
        matriz2[i][j] = input.nextInt();
    }
}
... fazer o mesmo para a matriz3

Mas repare como é repetitivo (fiz basicamente a mesma coisa duas vezes, só mudou de matriz1 para matriz2, e depois mudaria novamente para a matriz3), então você poderia criar um método para preencher uma matriz qualquer:

static void lerDadosMatriz(Scanner input, int[][] m) {
    for (int i = 0; i < m.length; i++) {
        for (int j = 0; j < m[i].length; j++) {
            System.out.printf("Digite o elemento da posição [%d, %d]: ", i, j);
            m[i][j] = input.nextInt();
        }
    }
}

E aí é só usar este método:

System.out.println("Lendo dados da matriz 1:");
lerDadosMatriz(input, matriz1);
System.out.println("Lendo dados da matriz 2:");
lerDadosMatriz(input, matriz2);
System.out.println("Lendo dados da matriz 3:");
lerDadosMatriz(input, matriz3);

Tendo as 3 matrizes, para somar basta fazer um loop e ir somando os valores e guardando no resultado:

for (int i = 0; i < resultado.length; i++) {
    for (int j = 0; j < resultado[i].length; j++) {
        resultado[i][j] = matriz1[i][j] + matriz2[i][j] + matriz3[i][j];
    }
}

Pronto!

Se quiser exibir o resultado, basta usar um loop e imprimir os valores. Poderia ser como o for acima, mas se você só quiser os valores e não precisa saber dos índices, pode usar um enhanced for:

for (int[] linha : resultado) { // para cada linha da matriz
    for (int valor : linha) { // para cada valor da linha
        System.out.printf("%5d", valor); // alinhar o número à direita, usando 5 posições
    }
    System.out.println();
}

Correct answer by hkotsubo on October 8, 2020

  1. A linguagem Java permite que você declare variáveis multidimensionais cujas dimensões sejam variáveis. No entanto, você esta definindo as dimensões das matrizes antes de lê-las;
  2. Do jeito que você está lendo as dimensões, acaba definindo, na posição [i, j] (que, pelo código postado, não têm um valor definido) o valor definido pelo usuário. É necessário que você leia a linha, depois a coluna e então instanciar a matriz com os valores informados pelo usuário;
  3. Para obter a soma das duas matrizes, é necessário, primeiro, obter os valores delas, lendo elemento por elemento. Então, percorrendo-as, armazenar na terceira matriz a soma dos elementos das posições correspondentes. Com isso em mãos, é possível exibir a terceira matriz, percorrendo-a e mostrando elemento por elemento.

Answered by João Victor Sierra on October 8, 2020

Add your own answers!

Ask a Question

Get help from others!

© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP