[Resolvido]Duvida com Matrizes

A matriz transposta de

4 5 6 7 8
2 3 4 5 6

é

4 2
5 3
6 4
7 5
8 6

Boas a todos estou cm duvida com relaçao a este exercicio de como trasponho a matriz alguma sugestao?? Agradeço desde ja o exclarecimento …
Irei postar o codigo de como estou fazendo a matriz , aminha duvida e de como farei para transpola…

Considere que cada elemento em uma matriz está posicionado em uma combinação de linhas (x) e colunas (y).
Assim sendo, a matriz transposta coloca os elementos da matriz base, invertendo a posição dos elementos, enquanto o elemento matriz[x][y] está em [x][y] na matriz base, na matriz transposta ele estará em [y][x]

Se você reparar, a tranposta é somente os índices invertidos.

Na posição i=1 j=2 temos o valor 5, na transposta, esse valor 5 vai para a posição i=2 j=1, repare que você somente precisa
inverter os indíces na matriz transposta, quando for percorrer a matriz.

se você fizer um for, percorrendo a matriz original, você pode apenas inverter i com j, que resultará na transposta.
Vê se isso ajuda, se ainda assim não souber como fazer, posso postar um exemplo depois.

drsmachado respondeu antes rsrs…

A idéia da matriz transposta é transformar as linhas em colunas, invertendo suas dimensões.
É só seguir a lógica, leia os itens de cada linha e jogue-os em colunas…

Primeiro crie a matriz pra receber os valores, invertendo as dimensões… se a matriz original é [x][y] , a transposta vai ter dimensão [y][x].

Depois, itere pelas linhas, invertendo as posições dos itens…
[0][0] vira [0][0]
[0][1] vira [1][0]
[0][2] vira [2][0]

[1][0] vira [0][1]
[1][1] vira [1][1]
[1][2] vira [2][1]

Sacou? A lógica é essa, agora a implementação você faz, a intenção é essa não é?

valeu pela ajuda vou ver se consigo fazer isso …
depois posto o codigo …
abraços…

Dica: crie um método que transponha qualquer matriz. Digamos que você queira transpor uma matriz de double. É bem fácil fazer isso:

public static double[][] transpor (double[][] entrada) {
    double[][] resultado = new double[entrada[0].length][entrada.length];
    ...... <-- isto é por sua conta 
    return resultado;
}

[code]import java.util.*;
public class Main {

/**
 * @param args the command line arguments
 */


/*    private static MAXLINHAS = 20;
  private static MAXCOLUNAS = 20;*/

public static void main (String [] args){

	Scanner sc = new Scanner(System.in);

	//lê o numero de linhas
	System.out.print("Quantas linhas tem a matriz? ");
    
	int nLinhas=sc.nextInt();
	// lê o numero de colunas
	System.out.print("E quantas colunas ");
    
    int nColunas=sc.nextInt();
    		//declara e lê a matriz
	int [][] matriz = leMatriz(nLinhas,nColunas, sc);

	//imprime a matriz no écran para verificação
	for(int i=0; i<nLinhas; i++){
	    for(int j=0;j<nColunas;j++)
		System.out.print(matriz[i][j]+" ");
	    System.out.println();
	}

}

public static int[][] leMatriz(int nLinhas, int nColunas, Scanner sc){

	int [][] matriz = new int [nLinhas][nColunas];

for (int i=0;i<nLinhas;i++)
	for(int j=0;j<nColunas;j++)
		matriz[i][j]=leIntPositivo(sc);
return matriz;
}


public static int leIntPositivo(Scanner sc){
int n = -1;
do {System.out.print(" :");
    if (sc.hasNextInt()) n = sc.nextInt();
    else {sc.next();
	n = -1;}
} while (n <= 0);
return n;
}

public static int trasPosta (int [][] entrada){
int [][] matriztrasposta=new int [entrada[0].length][entrada.length];
int [][]teste=new int [][];
for (int i=0;i<entrada[0].length;i++)
for (int j=0;j<entrada.length;j++)
teste[i][j]= matriztransposta[j][i];

}

[/code]
bem pessoal posto meu codigo aqi mas estou com duvidas,n posso invocar o metodo matriz dentro do metodo transPosta?nao estou conseguindo
e peço a ajuda de voces com relaçao ao codigo da transposta n sei se esta correto.
Estou a ter um pouco de dificuldade com java e meu primeiro semestre de java …por isso as muitas duvidas…

E gostaria de saber se o codigo no geral esta bom ou poderia melhorar isto??

alguem me ajuda aqi por favor?~?

Sugestão:

// - - > inclua o procedimento de transposição após o preenchimento da matriz, como segue:
    //declara e lê a matriz   
    int [][] matriz = leMatriz(nLinhas,nColunas, sc);   
  
    //efetua a transposição
    int [][] matriztransposta=new int [nColunas][nLinhas];   
    for (int i=0;i<nLinhas;i++)   
        for (int j=0;j<nColunas;j++)    
            matriztransposta[i][j]= matriz[j][i];   
}  

ou, se desejar um procedimento à parte:

    //declara e lê a matriz   
    int [][] matriz = leMatriz(nLinhas,nColunas, sc);   
  
    //efetua a transposição
    matriz = trasPosta (matriz);

    // (. . .)

    public static int trasPosta (int [][] entrada){   
    int [][] matriztransposta=new int [entrada[0].length][entrada.length];   
    for (int i=0;i<entrada[0].length;i++)   
        for (int j=0;j<entrada.length;j++)    
            matriztransposta[i][j]= entrada[j][i];   
    return  matriztransposta;
    }

testei os dois exemplos q me passou marcio mas n consegui transpor a matriz ,n sei se fiz certo mas a saida ficou assim
Quantas linhas tem a matriz? 3
E quantas colunas 2
:1
:2
:3
:4
:5
:6
1 2
[[I@13caecd2 4
[[I@f843865 6
[[I@1194a4e
n sei o q estou fazendo de errado??

[code]//imprime a matriz no écran para verificação
for(int i=0; i<nLinhas; i++){
for(int j=0;j<nColunas;j++)
System.out.print(matriz[i][j]+ " " );
System.out.println();
matriz=trasPosta(matriz);
System.out.print(matriz);
}

    /* int [][] matriztransposta=new int [nColunas][nLinhas];     
   for (int i=0;i<nLinhas;i++)     
   for (int j=0;j<nColunas;j++)      
   matriztransposta[i][j]= matriz[j][i]; 
   System.out.print(matriz);
   System.out.println();*/[/code]

estes sao os codigos

Obrigado a todos pela ajuda consegui chegar la :slight_smile: