Soma de Matriz

Gente minha primeira pergunta aqui, então lá vai.

Faça a soma dos valores que se encontram nas seguintes posições da matriz:
• Primeira Linha;
• Última Linha;
• Primeira Coluna;
• Última Coluna;
• Diagonal Principal;
• Diagonal Secundária

eu tenho q somar, mas n estou conseguindo a matriz eu já fiz, alguém poderia me ajudar na parte de somar ?

public class exemplo {
 public static void main(String[] args) {
        int mat[][] = new int[10][10];
        int vetor[] = {0, 0, 0, 0, 0, 0,};

        for (int i = 0; i < mat.length; i++) {
            for (int j = 0; j < mat[i].length; j++) {
                mat[i][j] = (int) (Math.random() * 10);

                System.out.print(mat[i][j] + " ");
            }
            System.out.println();
        }

    }
}

Para somar a primeira linha, vc deve iterar sobre a matriz usando a posição zero referente à linha e ir incrementando a posição das colunas:

Veja essa matriz:

int matriz[3][3]

   0   1   2  <- colunas
0 [ ] [ ] [ ]
1 [ ] [ ] [ ]
2 [ ] [ ] [ ]
^
linhas

Para acessar todas as posições da primeira linha da matriz, faz assim:

matriz[0][0];
matriz[0][1]
matriz[0][2]

Ou seja, se quiser somar, vc tem que fazer um loop mantendo o indice da linha em 0 (zero) e ir incrementando o índice da coluna.

matriz[0][i]

Para as outras somas, a lógica é parecida. Vai mudar um pouco mais apenas para os casos das diagonais.

1 curtida

Primeiro, esse vetor não está sendo usado para nada, então eu removi :slight_smile:

Outro ponto é que você pode usar a classe java.util.Random para gerar números aleatórios, pois ela tem o método nextInt que já retorna um inteiro no intervalo desejado:

int mat[][] = new int[10][10];
Random rand = new Random();
for (int i = 0; i < mat.length; i++) {
    for (int j = 0; j < mat[i].length; j++) {
        mat[i][j] = rand.nextInt(10); // gera um número inteiro entre 0 e 9
        System.out.print(mat[i][j] + " ");
    }
    System.out.println();
}

Enfim, para fazer as somas, basta percorrer a matriz e … ir somando :slight_smile:

Lembrando que a “matriz” na verdade é um array de arrays (um array no qual cada elemento é outro array). E arrays são indexados em zero (a primeira posição é zero, a segunda é 1, etc). Isso já foi bem explicado acima.

Sendo assim, usando os mesmos for's acima, a primeira linha é quando i é igual a zero, e a última é quando i é igual ao tamanho da matriz menos 1. O mesmo vale para a primeira e última coluna.

Já a diagonal principal é quando i e j são iguais, e a diagonal secundária é quando i é igual ao tamanho da matriz, menos j, menos 1.

Ou seja, para calcular as somas, ficaria assim:

int primeiraLinha = 0, ultimaLinha = 0, primeiraColuna = 0, ultimaColuna = 0, diagonalPrincipal = 0, diagonalSecundaria = 0;
for (int i = 0; i < mat.length; i++) {
    for (int j = 0; j < mat[i].length; j++) {
        int valor = mat[i][j];
        if (i == 0) {
            primeiraLinha += valor;
        } else if (i == mat.length - 1) {
            ultimaLinha += valor;
        }
        if (j == 0) {
            primeiraColuna += valor;
        } else if (j == mat[i].length - 1) {
            ultimaColuna += valor;
        }
        if (i == j) {
            diagonalPrincipal += valor;
        }
        if (i == mat.length - j - 1) {
            diagonalSecundaria += valor;
        }
    }
}
System.out.printf("Somas:\nprimeira linha=%d\núltima linha=%d\nprimeira coluna=%d\núltima coluna=%d\ndiagonal principal=%d\ndiagonal secundária=%d\n",
        primeiraLinha, ultimaLinha, primeiraColuna, ultimaColuna, diagonalPrincipal, diagonalSecundaria);

Claro que daria para fazer um loop para cada soma, mas isso seria redundante - se dá pra fazer tudo de uma vez, pra que percorrer a matriz várias vezes?

3 curtidas