questão de certificação 2

       int i=0, j=1;
       if((i++ == 1) && (j++ == 2)){
          i=42;
       }
       System.out.println("i="+i+" j="+j);

Qual o resultado?
a - Imprime: i=42 j=2
b - Imprime: i=42 j=1
c - Imprime: i=1 j=1
d - dá erro de compilação
e - nenhuma das anteriores

:?: :?: :?:

Isso mesmo! :!:

c - Imprime: i=1 j=1

Porque no teste utilizando &&, se a primeira expressão for falsa, então,
consequentemente, o resultado da expressão será falso, e nem testa a 2ª
expressão. Por isso q ‘j’ não foi incrementado, pois a 2ª expressão nem foi
testada. Já a primeira sim.

Se quiser que a 2ª expressão seje testada, terá q utilizar o operador ‘&’, que testa byte a byte.

por exemplo:

int i=0, j=1;
if((i++ == 1) & (j++ == 2)){
    i=42;
}
System.out.println("i="+i+" j="+j); 

o resultado será:
i=1 j=2

falow!

[quote=“Alexandre”]c - Imprime: i=1 j=1

Porque no teste utilizando &&, se a primeira expressão for falsa, então,
consequentemente, o resultado da expressão será falso, e nem testa a 2ª
expressão. Por isso q ‘j’ não foi incrementado, pois a 2ª expressão nem foi
testada. Já a primeira sim.

Se quiser que a 2ª expressão seje testada, terá q utilizar o operador ‘&’, que testa byte a byte.

por exemplo:

int i=0, j=1;
if((i++ == 1) & (j++ == 2)){
    i=42;
}
System.out.println("i="+i+" j="+j); 

o resultado será:
i=1 j=2

falow![/quote]

Eu nunca entendi muito bem

pq quando eu faço isso ele incrementa o valor de i

    	int i = 0;
    	int j = 0;
    	if((i++ == 1) && (j++ == 0)){
               // ...
    	}

eu quando eu faço isso ele não incrementa o valor do i

int i = 0; int j = 0; if((i+1 == 1) && (j++ == 0)){ // ... } [/code]

Porque o operator de incremento funciona assim mesmo.
Onde você vir i++, na verdade é o mesmo que i=i+1.
Ele soma o valor de 1 e atribui o resultado à variável i.
Por isso que i++ não é igual a i+1.
Neste segundo caso, o valor se perde, não é atribuído à variável i.

Caiu uma exatamente como essa ai… alias… duas vezes!!!
Só que mudou uma coisa: ele usou o operador ++ na frante em uma das variaveis… Daí a comparacao nunca entrava :smiley:

Mas ainda bem que prestei atenção… hehehhehe

[quote=“Alexandre”]c - Imprime: i=1 j=1

Porque no teste utilizando &&, se a primeira expressão for falsa, então,
consequentemente, o resultado da expressão será falso, e nem testa a 2ª
expressão. Por isso q ‘j’ não foi incrementado, pois a 2ª expressão nem foi
testada. Já a primeira sim.

Se quiser que a 2ª expressão seje testada, terá q utilizar o operador ‘&’, que testa byte a byte.

por exemplo:

int i=0, j=1;
if((i++ == 1) & (j++ == 2)){
    i=42;
}
System.out.println("i="+i+" j="+j); 

o resultado será:
i=1 j=2

falow![/quote]

Só para saber… i++ ele primeiro incrementa depois testa, ou primeiro testa e depois incrementa?

Pq se ele primeiro incrementar, a primeira condição seria verdadeira…

pós-incremento faz o incremento após a operação em que aparece…
e pré-incremento faz o contrário :wink: