Pegadinha - Controle de Fluxo

public class Fluxo { public static void main(String[] args) { boolean x = true; boolean y = false; short z = 42; if((x == true)&&(y = true))z++; if((y == true)||(++z==44))z++; System.out.println(z); } }

Alguêm advinha qual é o resultado?

45

[quote] (y = true) [/quote]Já tinha visto isso na linguagem C

parece que está comparando y com true, mas em C eu diria que :

Acho que o java fez o mesmo, não foi?

Sim o java atribuiu.

O que java não pode que C pode é fazer.

int c = 25; if(c){ //mais codigo aki. }
Java só aceita variaveis e comparacoes booleanas.

E ai vai mais uma tentativa?

:wink:

[quote]
int c = 25;
if©{
[/quote]Coisa de loco! :shock:

Eu acho que a resposta é 44.

[]'s.

43

[code]
public class Fluxo {
public static void main(String[] args) {
boolean x = true;
boolean y = false;
short z = 42;

     // x é true, y recebe true = entra no if, z é incrementado (z = 43)
     if((x == true)&&(y = true))z++;  

     // como y é true, ++z == 44 não é executado (por causa do OR de curto circuíto)
     if((y == true)||(++z==44))z++;  
     System.out.println(z);  
 }  

} [/code]

Até mais!

[quote=gilberto_oliveira][quote]
int c = 25;
if©{
[/quote]Coisa de loco! :shock:[/quote]

Não é coisa de louco não.
Em C++ tudo que é diferente de 0 ou que não é NULL representa true em uma operação condicional.

Até mais!

Eu acho que é 44 pois apesar de ele não entrar na condição do (++z == 44) o OR deu true, então ele pula e executa o z++ dentro do if.

Corrigindo!

É como o cara falou!
É 44!

Ele vai entrar no primeiro IF por conta da atribuição no Y.

O segundo if ele entra sem avaliar a segunda expressão por conta do ||.
Já que a primeira já é verdadeira, não tem a necessidade de analisar a segunda porque é ||.

Até!

é verdade 44 só prestar atenção!

A pessoal como a alguns já responderam. A resposta correta é 44.

:wink:

44 é o correto !!

aproveitando o tópico, gostaria de expor uma pequena alteração no código que faz uma grande diferença, principalmente pra quem está estudando para certificação.

 public class Fluxo {  
     public static void main(String[] args) {  
         boolean x = true;  
         boolean y = false;  
         short z = 42;  
         if((x == true) && (y = true))z++;  
         if((y == true) | (++z==44))z++;  
         System.out.println(z);  
     }  
 }

Qual é o resultado ai?
Resposta 45
pois o if

 if((y == true) | (++z==44))z++;  

é avaliado dos dois lados por conta do operador “|”
[]´s a todos

boa pegadinha essa o do |, || nesse caso ai teve o & mais é bom sabre a regra… heeh :D. aparece muita questao dessa e sempre envolvendo muitos for, while, o encademento… ter bastate atencao nas questoes de fluxo de controle as pegadinhas ficam bem desfarçadas… e ter atenção tb se compilam… acho uma das piores questoes…

Puts, pensei que não ia nem entrar na segunda expressão com o || :shock:, mas pelo jeito entra…

boolean x = true;
		boolean y = false;
		short z = 42;
		if((x == true)&&(y = true))z++;
		if((y == true)||(++z==44))z++;
		System.out.println(z);

na verdade não entra na segunda expressão do || o que acontece aqui é o seguinte… vamos fazer rastreamento do codigo…
no primeiro if x é igual a true && y recebe true.
logo entra em ação o primeiro if(ou seja o teste da verdadeiro)…incrementa o z para 43…
NO segundo if y é igual a true… logo não executa a segunda expressão pois para o operador || somente uma já sendo true ele não verificara o restante, logo o teste do if é true e entra no if e incrementa o z para 44.
no System.out.println(z)// imprimira 44

[quote=Raff][code]
boolean x = true;
boolean y = false;
short z = 42;
if((x == true)&&(y = true))z++;
if((y == true)||(++z==44))z++;
System.out.println(z);

[/code]
na verdade não entra na segunda expressão do || o que acontece aqui é o seguinte… vamos fazer rastreamento do codigo…
no primeiro if x é igual a true && y recebe true.
logo entra em ação o primeiro if(ou seja o teste da verdadeiro)…incrementa o z para 43…
NO segundo if y é igual a true… logo não executa a segunda expressão pois para o operador || somente uma já sendo true ele não verificara o restante, logo o teste do if é true e entra no if e incrementa o z para 44.
no System.out.println(z)// imprimira 44
[/quote]

Off course :oops:
Pode me chamar de burro :smiley:

Até mais!

[quote=davidbuzatto][quote=Raff][code]
boolean x = true;
boolean y = false;
short z = 42;
if((x == true)&&(y = true))z++;
if((y == true)||(++z==44))z++;
System.out.println(z);

[/code]
na verdade não entra na segunda expressão do || o que acontece aqui é o seguinte… vamos fazer rastreamento do codigo…
no primeiro if x é igual a true && y recebe true.
logo entra em ação o primeiro if(ou seja o teste da verdadeiro)…incrementa o z para 43…
NO segundo if y é igual a true… logo não executa a segunda expressão pois para o operador || somente uma já sendo true ele não verificara o restante, logo o teste do if é true e entra no if e incrementa o z para 44.
no System.out.println(z)// imprimira 44
[/quote]

Off course :oops:
Pode me chamar de burro :smiley:

Até mais![/quote]

burro nada cara essas coisas acontece mesmo !!