You can only add matrices of the same size. If you have a matrix M x N (with M rows and N columns), you can only add it with another matrix M x N, and the result will be another matrix M x N. That is, it makes no sense to read the size of the 3 matrices, because the user can type different sizes for each one. What you have to do is read the size once, and then create the 3 matrices (plus the matrix that stores the sum result) with the same size.
Also, you have to read the number of rows and columns separately. And you only create the matrices afterward to read this data:
// 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];
Once the matrices are created, you still need to fill in their values. One way to do it is to:
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
But notice how repetitive it is (I did basically the same thing twice, only changed from matriz1
for matriz2
, and then switch back to matriz3
), then you could create a method to fill any matrix:
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();
}
}
}
And then just use this method:
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);
Having the 3 matrices, to add just make one loop and add the values and keep in the result:
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];
}
}
Ready!
If you want to display the result, just use one loop and print the values. It could be like for
above, but if you only want the values and don’t need to know the contents, you can use a 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();
}