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);
}
}
[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);
}
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 é ||.
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…
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]
[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]