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];
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
Answered by João Victor Sierra on October 8, 2020
Get help from others!
Recent Questions
Recent Answers
© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP