EP3 erro no retorno de valor

Re: EP3 erro no retorno de valor

por Vinícius Daros -
Número de respostas: 0
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