Ajuda, matriz transposta

10 respostas
P

to tentando fazer o método da matriz transposta porem não estou achando pq esta dando IndexOutOfBounds, pra mim a lógica do for ta certa.
sera q a implementação ta errada?

//- Implementar um método que calcule a matriz transposta de uma matriz dada:
	public int[][] matrizTransposta(int[][] matriz){
		for(int linha=0;linha<matriz.length;linha++){
			for(int coluna=0;coluna<matriz[linha].length;coluna++){
				if(coluna>linha)
					matriz[linha][coluna]=matriz[coluna][linha];
			}
		}
		return matriz;
		  
	}

tambem gostaria de saber como declarar uma matriz bidimensional como uma string…

obrigado,
aguardo.

10 Respostas

kinow

Fala Pedro, vou responder a sua pergunta 2 e depois ler para ver se sei a pergunta 1 (sobre o código), ok? Você pediu matriz bidimensional “como String”… se você quis dizer “matriz bidimensional de Strings”, a resposta é a que segue, senão poderia ser mais específico? Não compreendi.

Matriz bidimensional de Strings:

String[][] matriz = new String[10][];

ou String[][] matriz = null;

E depois você preenche a matriz ou define o tamanho. Você só é obrigado a definir o tamanho da primeira matriz. Por quê?

Rápido adendo:
Porque assim você tem espaço para dez matrizes de Strings. Daí você vai alocar o espaço de cada matriz individualmente depois.

Se ficou confuso com o adendo, desconsidere-o :wink:

Guto_Magalhaes

Cara, tb nao vi problema. Pq nao tentar fazer um debug na classe? Com o debug vc vai executando linha a linha.
Pega uma IDE(eclipse por exemplo). Ai é so vc clicar na margem esquerda, exatamente na linha que vc quer começar o debug, ai é so executar a classe e quando chegar na linha marcada, vc ira executar e ver o codigo sendo executado ao mesmo tempo.

Falow

kinow

Por que acontece arrayOutOfBounds?

Se você rodar seu programa com uma matriz de 4 linhas por 3 colunas, não haverá problema, assim como matrizes quadradas.

Agora, se houver um número maior de colunas do que de linhas, dará estouro no array.

Você etm uma matriz[2][3]. A transposta dela tem que ser montada numa matriz [3][2]. Me corrija se estiver errado, mas você deveria montar uma matriz nova antes de retornar o método. Vou fazer um novo método e enviar, se alguém tiver outra solução ;).

Abraços.

P

humm vlw ai
verdadi o problema era mesmo com este tipo de matriz…
no teste no papel fiz pra uma matriz quadrada e a que eu estava testando no programa era uma de 3 linhas por 4 colunas…

soh q to errando ou faltando alguma coisa ainda na classe da interface, não esta aparecendo os numeros e sim uns códigos estranho
[[I@422ede

public class InterfaceMatrizPedro{
	public static void main(String args[]){

                             MatrizPedro execute=new MatrizPedro();
                              int[][] matriz={ {4,6,2},{12,9,3}, {10,2,3} };

                              System.out.println("A matriz original era a: " + matriz );
                              System.out.println("A matriz transposta eh a: " + execute.matrizTransposta(matriz) );

	
	}
}

o println ta errado?? tentei fazer: System.out.printf("… %f",execute.matrizTransposta(matriz) ); tb não deu certo e nem o System.out.printf("… %d",execute.matrizTransposta(matriz) );

P

ii acho q oq flei atras era bobagem… acho q vi um erro no codigo, eu posso mudar daquele jeito uma matriz q acabei de receber?? não teria que criar uma outra matriz e nela ir jogando os numeros na ordem certa??
olha como to pensando que é:

//- Implementar um método que calcule a matriz transposta de uma matriz dada:
	public int[][] matrizTransposta(int[][] matriz){
		
		int[][] transposta=new int[matriz[0].length][matriz.length];;
		for(int linha=0;linha<matriz.length;linha++){
			for(int coluna=0;coluna<matriz[linha].length;coluna++){
				if(coluna>linha)
					matriz[linha][coluna]=transposta[coluna][linha];
				if(coluna==linha)
					matriz[linha][coluna]=transposta[linha][coluna];
					
			}
		}
		return transposta;

ainda tem alguma coisa que ta errada, acabei de muda pra ve, vo começa tudo de novo pra faze com calma…

P

agora acho que terminei…
só que nao consigo faze ainda o print

//- Implementar um método que calcule a matriz transposta de uma matriz dada:
	public int[][] matrizTransposta(int[][] matriz){
		
		int[][] transposta=new int[matriz[0].length][matriz.length];;
		for(int linha=0;linha<matriz.length;linha++){
			for(int coluna=0;coluna<matriz[linha].length;coluna++){
				if(coluna>linha)
					matriz[linha][coluna]=transposta[coluna][linha];
				else if(coluna==linha)
						matriz[linha][coluna]=transposta[linha][coluna];
					else
						matriz[linha][coluna]=transposta[coluna][linha];
					
			}
		}
		return transposta;
kinow

Um int é um tipo primitivo, um int[][] é um Objeto. Confuso? Isso cai na prova de SCJP. Por isso quando você manda imprimir sair algo estranho, é o endereço do objeto na memória que você está mandando imprimir. Para testar, pode fazer Object o = new Object(); e depois imprimir o objeto o. A saída será um código no mesmo formato.

O que você precisa implementar é um for dentro de outro for ;). Moleza se você implementou a opção de transpor a matriz.

Abraços.

L

O post é antigo, mas alguém pode precisar, então tá aí:

import java.util.Arrays;

import javax.swing.JOptionPane;



public class MatrizTransposta {

	public static void main(String[] args) {
		
		int m[][] = {{1,2,3},{4,5,6},{7,8,9}};
		
		int[][] transposta=new int[m[0].length][m.length];;
		
		System.out.println("MATRIZ NORMAL ");
		for(int i=0; i<m.length; i++)
		{
			for(int j=0; j<m[i].length; j++)
			{
				System.out.print(m[i][j]+"\t");
			}
			System.out.println();
		}
		
		for(int linha=0;linha<m.length;linha++){  
	        for(int coluna=0;coluna<m[linha].length;coluna++){  
	            if(coluna > linha || coluna < linha)  
	            	transposta[linha][coluna]=m[coluna][linha];  
	            if(coluna==linha)  
	            	transposta[linha][coluna]=m[linha][coluna];  
	                  
	        }  
	    } 
		
		System.out.println();
		System.out.println("MATRIZ TRANSPOSTA ");
		for(int i=0; i<transposta.length; i++)
		{
			for(int j=0; j<transposta[i].length; j++)
			{
				System.out.print(transposta[i][j]+"\t");
			}
			System.out.println();
		}
		

	}
}
jpedroschmitz

Matriz transposta com Scanner

Segue abaixo um código para fazer uma matriz transposta: `

public static void main(String[] args) {
	// Esse programa lê uma matriz bidimensional e transforma em um
	// transposta
	Scanner pergunta = new Scanner(System.in);
	int n = 3;
	int[][] matriz = new int[n][n];
	int[][] matrizT = new int[n][n];
	System.out.println("Matriz M[3][3]\n");

	for (int linha = 0; linha < n; linha++) {
		for (int coluna = 0; coluna < n; coluna++) {
			System.out.printf("Insira o elemento M[%d][%d]: ", linha + 1, coluna + 1);
			matriz[linha][coluna] = pergunta.nextInt();
		}
	}

	System.out.println("\nA Matriz original ficou: \n");
	for (int linha = 0; linha < n; linha++) {
		for (int coluna = 0; coluna < n; coluna++) {
			System.out.printf("\tM[%d][%d]: ", linha + 1, coluna + 1);
			System.out.printf("%d \t", matriz[linha][coluna]);
		}
		System.out.println();
	}
	for (int linha = 0; linha < n; linha++) {
		for (int coluna = 0; coluna < n; coluna++) {
			matrizT[linha][coluna] = matriz[coluna][linha];
		}
	}
	System.out.println("\n Matriz transposta: \n");
	for (int linha = 0; linha < n; linha++) {
		for (int coluna = 0; coluna < n; coluna++) {
			System.out.printf("\tM[%d][%d]: ", linha + 1, coluna + 1);
			System.out.printf("%d \t", matrizT[linha][coluna]);
		}
		System.out.println();
	}
}

}`

A

Matriz transposta SEM scanner, XD.

package crisis;
import java.util.Arrays;

public class Crisis {

public static void main(String[] args) {
    int[][] matriz = {{1,2,3,4},{5,6,7,8}};
    for (int[] normal : matriz) {
        System.out.println(Arrays.toString(normal));
    }
    System.out.println();
    for (int[] transposta : matrizTansposta(matriz)) {
        System.out.println(Arrays.toString(transposta));
    }        
}   

private static int[][] matrizTansposta(int[][] matriz) {
    int[][] retorno = new int[matriz[0].length][matriz.length];//invertendo a linha com a coluna
    for (int lin = 0; lin < retorno.length; lin++) {
        for (int col = 0; col < retorno[lin].length; col++) {
            retorno[lin][col] = matriz[col][lin];
        }
    }
    return retorno;
}

}

Criado 19 de novembro de 2007
Ultima resposta 20 de mai. de 2017
Respostas 10
Participantes 6