Metade de uma matriz

1 resposta
java
A

Bom dia, construi este programa que gera uma matriz de ordem n e passa metade (sem contar a diagonal) para um vetor.

Mas o programa está a passar apenas uma parte dos valores.

Este é o codigo:

public void executar() {
        
        int[]vetorMetade = gerarVetorMetade(matrizAleatoria);
        for (int e = 0; e<vetorMetade.length;e++){
            System.out.println(vetorMetade[e]);
        }
        
        
    }
    
    /**
     * Cria um vetor com metade dos termos de uma matriz
     */
    
    private int[] gerarVetorMetade(int matriz[][]) {
        int resultado = 0;
	        for (int x = 1; x <= matriz.length-1; x++){
                resultado += x;
        }
        int[] vetorMetade = new int[resultado];
        for ( int y=1;y<matriz.length;y++){
            for ( int x=0;x<matriz.length;x++){
                vetorMetade[x]=matriz[y][x];
            }
        }
        
        return vetorMetade;
    }

Por exemplo se ele gerar esta matriz:

0 17 76 65
17 0 46 36
76 46 0 58
65 36 58 0

só passa estes valores para o vetor:

65
36
58

quando devia passar estes:

17
76
46
65
36
58

Obrigado pela ajuda :slight_smile:

1 Resposta

S

É só você calcular certinho as posições linha e coluna na hora de iterar a matriz.

Para obter a metade superior da matriz:

private int[] gerarVetorMetadeSuperior(int matriz[][]) {
    int ordem = matriz.length;
    int posicoes = ((ordem * ordem) / 2) - (ordem / 2);
    int[] vetor = new int[posicoes];
    int posicao = 0;
    for (int linha = 0; linha < ordem; linha++) {
        for (int coluna = linha + 1; coluna < ordem; coluna++) {
            vetor[posicao] = matriz[linha][coluna];
            posicao++;
        }
    }
    return vetor;
}

Para obter a metade inferior da matriz:

private int[] gerarVetorMetadeInferior(int matriz[][]) {
    int ordem = matriz.length;
    int posicoes = ((ordem * ordem) / 2) - (ordem / 2);
    int[] vetor = new int[posicoes];
    int posicao = 0;
    for (int linha = 0; linha < ordem; linha++) {
        for (int coluna = 0; coluna < linha; coluna++) {
            vetor[posicao] = matriz[linha][coluna];
            posicao++;
        }
    }
    return vetor;
}

Exemplo:

int[][] matriz = new int[][] {
        new int[] { 0, 17, 76, 65 },
        new int[] { 17, 0, 46, 36 },
        new int[] { 76, 46, 0, 58 },
        new int[] { 65, 36, 58, 0 },
};
System.out.println("Matriz:");
for (int[] linha : matriz) {
    for (int elemento : linha) {
        String espaco = elemento < 10 ? "   " : "  ";
        System.out.print(espaco + elemento);
    }
    System.out.println();
}

int[] vetorMetade = gerarVetorMetadeSuperior(matriz);
System.out.println("Metade Superior:");
for (int elemento : vetorMetade) {
    System.out.print("  " + elemento);
}
System.out.println();

vetorMetade = gerarVetorMetadeInferior(matriz);
System.out.println("Metade Inferior:");
for (int elemento : vetorMetade) {
    System.out.print("  " + elemento);
}
Criado 30 de abril de 2019
Ultima resposta 30 de abr. de 2019
Respostas 1
Participantes 2