Qual a saída deste programa  XML
Índice dos Fóruns » Certificação Java
Autor Mensagem
adriano.ferranti
JavaTeenager
[Avatar]

Membro desde: 27/03/2006 10:59:38
Mensagens: 181
Offline

Para o pessoal que está se preparando para a SCJP: Qual a saída deste programa?

thiago.correa
GUJ Master
[Avatar]

Membro desde: 26/03/2006 18:54:30
Mensagens: 1861
Offline

1

---
"Se não puder ajudar, atrapalhe, afinal de contas o importante é participar!"
Thiago
[MSN]
adriano.ferranti
JavaTeenager
[Avatar]

Membro desde: 27/03/2006 10:59:38
Mensagens: 181
Offline

Errado... Alguém mais se habilita?
LuizClaudio
JavaEvangelist
[Avatar]

Membro desde: 03/04/2006 21:50:51
Mensagens: 388
Offline

0

"Porque Deus amou o mundo de tal maneira que deu seu filho unigênito para que todo aquele que nele crê não pereça, mas tenha vida eterna." João 3.16
[WWW]
danieldestro
Moderador
[Avatar]

Membro desde: 04/09/2002 17:26:16
Mensagens: 6667
Localização: São Paulo / Catanduva
Offline

Pegadinha forte. Tem a ver com a precedência dos operadores na linha:

i = i++;

Que dá um resultado diferente se fosse:

i = ++i;

Ou então:

i += 1;

gotjava?
Doe sangue
What You See Is What You Get!
Apostilas de Java grátis!
RefsCALL - Bandeira Eletrônica para Árbitro de Futebol
[WWW]
thiago.correa
GUJ Master
[Avatar]

Membro desde: 26/03/2006 18:54:30
Mensagens: 1861
Offline

Estranho a atribuição ter precedência na adição! Essa expressão não teria o mesmo efeito de i = i +1???

---
"Se não puder ajudar, atrapalhe, afinal de contas o importante é participar!"
Thiago
[MSN]
sergiolpf
Debugger
[Avatar]

Membro desde: 07/04/2005 11:04:02
Mensagens: 66
Offline

A resposta é zero....

Como a função fermin(int i) retorna void então o valor da variável 'i' do main não é alterada. Então após a chamada de fermin(i) o 'i' continua zerado.

o i = i++ não soma depois atrivui. Ele atribui depois soma, se fosse i = ++i ele somaria depois atribuiria o valor 1.

Logo a resposta é zero. =o)

Acho q é isso.

--Sergio Luiz--
--BCD - Bohemia Certified Drinker --
--Java Boy (SCJP) --
--Java WebBoy (SCWCD) --
--XML Certified --
[Email] [MSN]
danieldestro
Moderador
[Avatar]

Membro desde: 04/09/2002 17:26:16
Mensagens: 6667
Localização: São Paulo / Catanduva
Offline

sergiolpf wrote:Como a função fermin(int i) retorna void então o valor da variável 'i' do main não é alterada. Então após a chamada de fermin(i) o 'i' continua zerado.


Isso não tem a ver com o retorno no método, mesmo porque não existe uma atribuição do valor de retorno. Isso é uma pegadinha para aqueles que acham que a passagem de argumento é por referência e não por valor.

gotjava?
Doe sangue
What You See Is What You Get!
Apostilas de Java grátis!
RefsCALL - Bandeira Eletrônica para Árbitro de Futebol
[WWW]
sergiolpf
Debugger
[Avatar]

Membro desde: 07/04/2005 11:04:02
Mensagens: 66
Offline

thiago.correa wrote:Estranho a atribuição ter precedência na adição! Essa expressão não teria o mesmo efeito de i = i +1???


vc tem que ver que o (++) e o (--) são operadores unários a precedencia é outra.



--Sergio Luiz--
--BCD - Bohemia Certified Drinker --
--Java Boy (SCJP) --
--Java WebBoy (SCWCD) --
--XML Certified --
[Email] [MSN]
thingol
Moderador

Membro desde: 29/07/2004 16:10:13
Mensagens: 17543
Offline

De qualquer maneira, na minha prova do SCJP 5.0 não caiu esse tipo de sutileza.
(Só o fato de você ter de saber Serializable, generics (incluindo a parte de wildcards), e conhecer todas as classes de java.util.* que estão no Java Collections Framework na ponta da língua já é mais que suficiente.)
É bom saber esse tipo de sutileza, mas não é aquela coisa que vai lhe "reprovar".
[WWW]
thiago.correa
GUJ Master
[Avatar]

Membro desde: 26/03/2006 18:54:30
Mensagens: 1861
Offline

danieldestro wrote:Pegadinha forte. Tem a ver com a precedência dos operadores na linha:

i = i++;

Que dá um resultado diferente se fosse:

i = ++i;

Ou então:

i += 1;

O Daniel, porque ele atribui e depois soma???! Se fosse o inverso ( i = ++i ) ele retornaria um!

---
"Se não puder ajudar, atrapalhe, afinal de contas o importante é participar!"
Thiago
[MSN]
danieldestro
Moderador
[Avatar]

Membro desde: 04/09/2002 17:26:16
Mensagens: 6667
Localização: São Paulo / Catanduva
Offline

http://java.sun.com/docs/books/tutorial/java/nutsandbolts/expressions.html

gotjava?
Doe sangue
What You See Is What You Get!
Apostilas de Java grátis!
RefsCALL - Bandeira Eletrônica para Árbitro de Futebol
[WWW]
thiago.correa
GUJ Master
[Avatar]

Membro desde: 26/03/2006 18:54:30
Mensagens: 1861
Offline


The operators in this table are listed in precedence order: The closer to the top of the table an operator appears, the higher its precedence. Operators with higher precedence are evaluated before operators with relatively lower precedence.


A tabela mostra o 'expr++' e 'expr--' como de maior precedência e o igual como última, logo o '++' tem precedência sobre o '=' certo?!

Logo o resultado deveria ser 1.

---
"Se não puder ajudar, atrapalhe, afinal de contas o importante é participar!"
Thiago
[MSN]
chicobento
JavaGuru
[Avatar]

Membro desde: 14/06/2004 01:44:04
Mensagens: 226
Localização: Campinas
Offline

Bizarro. Parece até bug.
Se for analisar, a questão não é se ele soma e depois retorna, ou se ele retorna e depois soma.
Analisando a expressão i = i++ eu imaginei que fosse o equivalente a:
i = i;
i = i + 1;
Mas na verdade o que acontece é:
int a = i;
i++;
i = a;

SCEA 5
[MSN]
chicobento
JavaGuru
[Avatar]

Membro desde: 14/06/2004 01:44:04
Mensagens: 226
Localização: Campinas
Offline

thiago.correa wrote:

The operators in this table are listed in precedence order: The closer to the top of the table an operator appears, the higher its precedence. Operators with higher precedence are evaluated before operators with relatively lower precedence.


A tabela mostra o 'expr++' e 'expr--' como de maior precedência e o igual como última, logo o '++' tem precedência sobre o '=' certo?!

Logo o resultado deveria ser 1.


Quase!
Primeiro ele vai incrementar, mas como esse operador diz que deve retornar o valor anterior ao incremento, ele vai retornar o valor anterior (no caso 0), e vai atribuir ao i, portanto o incremento não valeu de nada. Entendeu ?

SCEA 5
[MSN]
 
Índice dos Fóruns » Certificação Java
Ir para:   
Powered by JForum 2.1.8 © JForum Team