EP3 erro no retorno de valor

EP3 erro no retorno de valor

by Matheus Nagaoka -
Number of replies: 5
Olá!!
começei a fazer o EP3 e tive um problema no retorno da matriz resultado... quando peço para retornar aparece o seguintes caracteres no lugar da matriz:
[[I@878c4c

não sei onde estou errando...

obrigado pela atenção!
In reply to Matheus Nagaoka

Re: EP3 erro no retorno de valor

by Maria Belotti -
tive o mesmo problema.

eu desisti (temporariamente, é claro) de fazer o negócio funcionar desse jeito. coloquei o método como void e imprimi a matriz com laços encaixados.

fiz isso para poder continuar mexendo no ep até ter uma boa solução....


In reply to Maria Belotti

Re: EP3 erro no retorno de valor

by Vinícius Daros -
Olá. Matheus

Não tinha entendido o que você quis dizer com "quando peço para retornar aparece o seguintes caracteres". Mas parece que você está tentando imprimir diretamente a matriz, fazendo algo como:

System.out.println("Imprimindo matriz: " + matriz);

Realmente, esse procedimento não lhe dará o resultado desejado. O correto é fazer como a Maria disse.
Faça dois laços de modo a percorrer todos os elementos da matriz e imprima-os um a um.

Abraço,

Vinícius
In reply to Vinícius Daros

Re: EP3 erro no retorno de valor

by Maria Belotti -
Vinícius,

Eu diria que o problema foi que ele tentou criar um método assim:

int[][] feiowh()
{
int [][] matriz = new int[i][j];
bla
return matriz;
}


daí o programa vai retornar aquelas coisas esquisitas...

e eu acho que é obrigatório que façamos isso no ep, segundo o enunciado.

mas como fazer para que o programa não retorne esse negócio esquisito...

In reply to Maria Belotti

Re: EP3 erro no retorno de valor

by Alexandre Cesar dos Santos -
Caro monitor:
O que o Matheus quis dizer é que ele colocou um comando return (nome da matrix) no final do método int[][] geraResultados().
Porém, não é devolvida uma matrix na tela e sim os códigos que não fazem sentido.
A pergunta é: mesmo que o método esteja correto, quando criamos uma matrix usando int[][] geraResultados() o return não devolve uma matrix "bonitinha" na tela? - como ocorre se usarmos um void geraResultados() e damos o System.out.print de forma conveniente a imprimir as linhas e colunas e formar a matrix.
Obrigado.
In reply to Alexandre Cesar dos Santos

Re: EP3 erro no retorno de valor

by Vinícius Daros -
Ok, talvez eu não tenha me expressado de forma clara.
No exemplo que passei anteriormente, não explicitei o que matriz era. Então:

int [][] matriz;

matriz = geraMatriz();
System.out.println("Imprimindo matriz: " + matriz);

Foi isso que eu entendi que vocês estão fazendo. Alguns podem até ter tentado:

System.out.println("Imprimindo matriz " + geraMatriz() );

Isso funciona perfeitamente quando a variável a ser impressa ou o retorno do método é um tipo primitivo (como int), pois o próprio valor em questão é utilizado.
Porém, quando a variável é uma referência para um objeto, o que deve ser impresso?
Vocês podem até supor que, no caso da matriz, seria razoável imprimir todos seus elementos. Mas o que deve-se imprimir quando o objeto é, por exemplo, do tipo Pessoa:

class Pessoa

{
String nome;
int RG;
int idade;
}

Nesse caso, talvez o nome seja o que nos interessa, mas também poderia ser o RG, ou até a idade. Viram quem não tem como o Java saber qual atributo de um objeto ele deve imprimir?
Então, quando tentamos usar:

Pessoa alguem = new Pessoa();
System.out.println("pessoa: " + alguem);

o que vemos na tela é uma cadeia de caracteres estranha.

Isso acontece porque, quando o Java tenta executar o println e vê que alguem não é de tipo primitivo, uma chamada ao método toString() do objeto é feita.
Assim como o método construtor, todos os objetos tem o toString(). Sendo que vocês podem reescreve-lo ou não.
Caso esse método não seja reescrito, por padrão, ele devolve uma string que indica o ID do objeto. É isso o que vocês viram quando tentaram imprimir a matriz.

Posto isso, é possível vizualizar duas soluções para o nosso caso, uma simples e outra um pouco mais complexa, porém mais elegante:
1- A forma simples é criar um método que imprime a matriz, como vocês já aprenderam;

2- A outra maneira seria criar uma nova classe para lidar com matrizes e criar lá dentro um método
public String toString()
Assim, o println funcionaria legal.

Espero que eu tenha esclarecido as dúvidas.

Abraço,

Vinícius