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
transpostacom 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
- Declaramos a matriz original
matrizcom 2 linhas e 3 colunas. - Obtemos
linhas = matriz.length(2) ecolunas = matriz[0].length(3). - Criamos
transpostacom dimensões invertidas:new int[colunas][linhas], ou seja, 3 linhas e 2 colunas. - Usamos dois
foraninhados para percorrer a matriz original. Para cadamatriz[i][j], atribuímostransposta[j][i] = matriz[i][j]. - Depois, percorremos a transposta com dois
fore 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]causariaArrayIndexOutOfBoundsExceptionao tentar acessartransposta[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, poismatriznão tem índicej=2na 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