Erro no if, o codigo não se comporta como esperado (Netbeans)

Eu estou tentando executar o if desse codigo só que ele não sai como esperado, era pra sair a resposta “Infantil B” mas esta saindo totalmente outra e oposta, alguem pode me ajudar por favor?

int idade;
        
        System.out.println("---------------------------------------");
        System.out.println("INFANTIL A = 5 - 7 Anos");
        System.out.println("INFANTIL B = 8 - 10 Anos");
        System.out.println("JUVENIL A = 11 - 13 Anos");
        System.out.println("JUVENIL B = 14 - 17 Anos");
        System.out.println("SENIOR = 18 - 25 Anos");
        System.out.println("----------------------------------------");
        
        System.out.println("Digite a idade: ");
        idade = leitor.nextInt();
        
        if (idade == 5 && idade <= 7) {
            System.out.println("INFANTIL A");                
        } else if (idade == 8 && idade <= 10){
           System.out.println("INFANTIL B");
        } else if (idade == 11 && idade <= 13) {
            System.out.println("Juvenil A");
        } else if (idade == 14 && idade <= 17) {
            System.out.println("Juvenil B");
        } else if (idade == 18 && idade <= 25) {
            System.out.println("SENIOR");
        } else {
            System.out.println("FORA DA FAIXA ETARIA");
    }
}

Nenhuma idade pode ter mais de um valor ao mesmo tempo!

Sua expressão usa && quando na verdade deveria ser ||, ou seja, a idade precisaria atender a uma OU outra expressão da condição, não uma E a outra ao mesmo tempo.

1 curtida

Aqui vc diz que a idade deve ser igual a 5 e menor ou igual a 7. Porque para o operador && retornar verdadeiro, as duas condições devem ser verdadeiras.

Ou seja, só vai entrar nesse if se for igual a 5. Se for qualquer outro valor, a primeira condição não será verdadeira, então o resultado do operador && será falso.

Acima sugeriram usar o operador ||, mas também dará errado. Pois se fizer if (idade == 5 || idade <= 7), quer dizer que a idade pode ser 5 ou menor ou igual a 7 (apenas uma delas precisa ser verdadeira). Ou seja, se a idade for zero, 1, 2, 3, 4, 5, 6, 7 ou qualquer valor negativo, entra no if - mas só deveria entrar se for 5, 6 ou 7.

Então o mais simples seria algo assim:

if (idade < 5 || idade > 25)  {
    System.out.println("FORA DA FAIXA ETARIA");
} else if (idade <= 7) {
    System.out.println("INFANTIL A");                
} else if (idade <= 10){
    System.out.println("INFANTIL B");
} else if (idade <= 13) {
    System.out.println("Juvenil A");
} else if (idade <= 17) {
    System.out.println("Juvenil B");
} else {
    System.out.println("SENIOR");
} 

O primeiro if verifica se está fora da faixa (menor que 5 ou maior que 25).

Se não entrou no primeiro if, é porque com certeza está dentro da faixa (ou seja, está entre 5 e 25), então não precisa testar isso de novo.

Então no segundo if eu só verifico se é menor ou igual a 7. Como nesse ponto eu já sei que está entre 5 e 25, então se entrou nesse if é porque está entre 5 e 7.

Se não entrou no segundo if, é porque com certeza é maior que 7, então só preciso testar se é menor ou igual a 10. E assim por diante.

Se não entrar em nenhum if, é porque está na última faixa, já que todos os outros valores possíveis já foram testados anteriormente.

1 curtida

Considerando que não existem idades negativas, para este contexto de ser fornecido um valor menor ou igual a zero a entrada não deveria ser aceita!

De toda forma, são abordagens de solução diferentes!

Mas e os valores de 0 a 4? Usar || vai dar errado pra essas idades.

E a partir do momento em que se pede entradas do usuário, tem que estar preparado pra receber qualquer coisa. Claro, talvez num exercício não precise ser tão rígido, mas acho importante já colocar essa mentalidade em quem está começando :slight_smile:

Dada a característica do exercício em que a primeira idade aceita é 5, eu incluiria valores abaixo de 5 como excludentes!

Justo, concordo totalmente!

Obg :slight_smile:

MUITO OBG, msm de vdd, me salvou :slight_smile: