Olá Pessoal, tudo bom?
Aqui é a resposta do puzzle 005. Veja na continuação deste post!
Puzzle 005 – Resposta
E aí, o que o código da classe Teste irá imprimir no console???
1 |
13 |
Mas porque ele imprimiu esse valor?
Vamos iniciar pelo início :-P. Pela linha 9:
1 |
ClasseInterna instancia = new ClasseInterna(5); |
Nessa linha o construtor da ClasseInterna é chamado passando o valor 5. Agora vamos ver a linha 19, única linha de código do construtor:
1 |
this.x = y++; |
De acordo com o que aprendemos com os outros puzzles, o operador de pós incremento não influencia no valor da variável atribuída quando existe apenas uma aparição do operador na mesma variável. Assim o valor do atributo x será 5.
Agora vamos voltar para a linha 10:
1 |
System.out.println(instancia.metodo(instancia)); |
Essa linha pega a instância que possui o valor de x como 5 e chama o método metodo(instancia). Repare que a instância criada é passada para o método. Vamos para o método:
1 2 3 4 5 6 7 8 9 10 11 |
int metodo(ClasseInterna instancia) { if (instancia.x == 5) { instancia.x += 6; metodo(instancia); } if (instancia.x == 6) { instancia.x += 9; metodo(instancia); } return ++instancia.x; } |
A instância (valor de x = 5) enviada é utilizada pelo if da linha 23, o qual entra dentro desse if.
Assim o atributo x é acrescido de 6, passando para o valor 11. Após isso na linha 25 é chamado novamente o método.
Nessa segunda chamada o java não entra em nenhum if, chegando na linha 31, o qual acresce em mais uma unidade a variável x, passando pra 12.
Lembre-se estávamos na segunda chamada do método, assim retornamos para a primeira chamada, que cai novamente na linha 31, o qual acrescenta em mais uma unidade, 13 e retornando para o System.out.println() o qual imprime 13 no console.
finnaly{
Gostou dos puzzles? Duvidas ou sugestões? Deixe seu feedback! Isso ajuda a saber a sua opinião sobre os artigos e melhorá-los para o futuro! Isso é muito importante!
Até um próximo post!
Leave a Reply