Desafio Java

Matriz transposta

Enunciado

Dada uma matriz int[][] matriz = {{1, 2, 3}, {4, 5, 6}} (2 linhas, 3 colunas), crie e exiba sua transposta (3 linhas, 2 colunas). A transposta troca linhas por colunas: o elemento matriz[i][j] vira transposta[j][i].

Requisitos

  • Criar uma nova matriz transposta com dimensões invertidas.
  • Preencher a transposta usando laços aninhados.
  • Exibir a matriz transposta linha por linha, com elementos separados por espaço.

Código inicial

public class MatrizTransposta {
    public static void main(String[] args) {
        int[][] matriz = {{1, 2, 3}, {4, 5, 6}};
        // Seu código aqui
    }
}

Saída esperada

1 4 
2 5 
3 6
Ver dica

A transposta terá matriz[0].length linhas e matriz.length colunas. Use dois laços: um para linhas e outro para colunas da transposta.

Mostrar solução
public class MatrizTransposta {
    public static void main(String[] args) {
        int[][] matriz = {{1, 2, 3}, {4, 5, 6}};

        int linhas = matriz.length;          // 2
        int colunas = matriz[0].length;      // 3

        int[][] transposta = new int[colunas][linhas];

        for (int i = 0; i < linhas; i++) {
            for (int j = 0; j < colunas; j++) {
                transposta[j][i] = matriz[i][j];
            }
        }

        for (int i = 0; i < transposta.length; i++) {
            for (int j = 0; j < transposta[i].length; j++) {
                System.out.print(transposta[i][j] + " ");
            }
            System.out.println();
        }
    }
}

Passo a passo

  1. Declaramos a matriz original matriz com 2 linhas e 3 colunas.
  2. Obtemos linhas = matriz.length (2) e colunas = matriz[0].length (3).
  3. Criamos transposta com dimensões invertidas: new int[colunas][linhas], ou seja, 3 linhas e 2 colunas.
  4. Usamos dois for aninhados para percorrer a matriz original. Para cada matriz[i][j], atribuímos transposta[j][i] = matriz[i][j].
  5. Depois, percorremos a transposta com dois for e imprimimos cada elemento seguido de espaço, quebrando a linha ao final de cada linha da matriz.

Por que funciona

A transposição troca a posição de linhas e colunas. Ao criar a nova matriz com dimensões invertidas e copiar cada elemento para a posição trocada, obtemos a transposta. Os laços aninhados garantem que todos os elementos sejam visitados exatamente uma vez.

Erros comuns

  • Criar a transposta com as mesmas dimensões: new int[linhas][colunas] causaria ArrayIndexOutOfBoundsException ao tentar acessar transposta[2][0] (índice 2 inexistente em 2 linhas).
  • Trocar os índices na atribuição: transposta[i][j] = matriz[j][i] também lança exceção, pois matriz não tem índice j=2 na primeira dimensão.
  • Esquecer de quebrar linha: sem System.out.println() após o laço interno, tudo sai em uma única linha.

Outra forma de resolver

Usando for-each para exibir a transposta:

for (int[] linha : transposta) {
    for (int valor : linha) {
        System.out.print(valor + " ");
    }
    System.out.println();
}

Essa forma é mais limpa quando não precisamos dos índices para a exibição.

Saída esperada

1 4 
2 5 
3 6