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!