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…
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.
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.
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 ;).
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) );
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…
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.
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;
}