Olá!
Estou fazendo alguns exercícios básicos em Java (static initialization blocks) e não entendi por qual razão meu if não funcionou quando eu inverti a condição…
Preciso testar se as variáveis são maiores e diferentes de zero.
Se faço a condição assim, os testes funcionam!
if (Main.b > 0 && Main.h > 0){
System.out.println(Main.b * Main.h);
} else {
System.out.println("O valor precisa ser maior e diferente de zero");
}```
Se faço assim… ele ignora a primeira condição e cai direto no else… calculando a área de números negativos.
if ((Main.b <= 0) && (Main.h <= 0)){
System.out.println("O valor precisa ser maior e diferente de zero");
} else {
System.out.println(Main.b * Main.h);
}```
Alguém consegue me falar o que estou fazendo de errado?
Obrigada!
Quais os valores que você atribuiu a Main.b
e Main.h
?
1 curtida
As condições não são equivalentes.
No primeiro código ele só entra no if
se ambas as condições forem satisfeitas: tanto b
quanto h
precisam ser maiores que zero. Se apenas um deles não for, cai no else
.
Para deixar mais claro, temos 4 possibilidades:
-
b
e h
são maiores que zero
-
b
é maior que zero, h
não
-
h
é maior que zero, b
não
-
b
e h
são menores ou iguais a zero
O if (Main.b > 0 && Main.h > 0)
indica que só pode entrar no if
se estiver no caso 1. Em qualquer outro caso, entra no else
.
Já o segundo código verifica se ambos são menores ou iguais a zero. Ou seja, if ((Main.b <= 0) && (Main.h <= 0))
indica que só vai entrar no if
se estiver no caso 4.
Se um dos números for maior que zero e o outro for menor ou igual, ele entra no else
.
Para corrigir, a ideia é que entre no if
se pelo menos um deles for menor ou igual a zero (não necessariamente os dois, somente um já é suficiente). Então deve-se trocar o &&
(and) por ||
(or):
if (Main.b <= 0 || Main.h <= 0) {
System.out.println("O valor precisa ser maior e diferente de zero");
} else {
System.out.println(Main.b * Main.h);
}
Repare também que não precisa de tantos parênteses, pois os operadores &&
e ||
possuem precendência menor que as comparações.
Agora ele entra no if
nos casos 2, 3 e 4, pois basta que uma das condições seja satisfeita:
- se
b
for menor ou igual a zero, não importa o valor de h
(cobre os casos 3 e 4)
- se
h
for menor ou igual a zero, não importa o valor de b
(cobre os casos 2 e 4)
1 curtida
Eu tinha que ter mudado o operador lógico && para ||…
Eu estava testando o segundo código com -1 e 5… e por causa do && ele acabava entrando no else, é tão óbvio agora! : )
De qualquer forma, obrigada!