Olá, Rick. Como vai?
Parabéns por praticar os conceitos de estruturas condicionais em Java! É criando esses pequenos programas que consolidamos a lógica de controle de fluxo de um sistema.
O seu código está muito bem estruturado em relação ao uso do if, else if e else. No entanto, ao analisarmos a condição que você construiu na linha 10, há um detalhe na lógica matemática dos operadores lógicos que fará com que o estudante nunca caia na recuperação.
Vamos dar uma olhada bem de perto no seu else if:
else if(media >= 5 && media >= 6.9){
O operador && (E) exige que ambas as condições sejam verdadeiras ao mesmo tempo para que o bloco seja executado. Se um estudante tirar média 6.0, por exemplo:
media >= 5 é Verdadeiro (6.0 é maior ou igual a 5).media >= 6.9 é Falso (6.0 não é maior ou igual a 6.9).
Como uma das condições falhou, o Java pula esse bloco e joga o aluno direto para o else de reprovado. Para que a recuperação funcione no intervalo correto (entre 5.0 e 6.9), a segunda condição precisa testar se a média é menor ou igual a 6.9.
Para visualizar como o Java avalia o fluxo dessas notas ao longo de uma linha numérica, veja o esquema abaixo:
Como corrigir o código:
Basta ajustar o operador de maior ou igual (>=) para menor ou igual (<=) na segunda validação:
import java.util.Scanner;
public class VerificacaoAprovacao {
public static void main(String[] args) {
double media = 6.0; // Testando com uma nota que deve ir para a recuperação
if (media >= 7.0) {
System.out.printf("O estudante teve média " + media + " e foi aprovado.");
} else if (media >= 5.0 && media <= 6.9) { // Ajustado para <= 6.9
System.out.println("O estudante teve média " + media + " e está de recuperação.");
} else {
System.out.println("O estudante teve média " + media + " e foi reprovado.");
}
}
}
Uma dica de ouro para simplificar:
No Java, as condições do if/else são avaliadas em cascata. Se o código chegou até o else if, nós já temos a certeza absoluta de que a nota não é maior ou igual a 7 (ou seja, ela já é menor que 7).
Por conta disso, você não precisa testar os dois lados no else if. Você pode simplificar a linha deixando apenas o limite mínimo:
if (media >= 7.0) {
// Aprovado
} else if (media >= 5.0) {
// Se o Java chegou aqui, a nota já é menor que 7.
// Então, qualquer nota entre 5.0 e 6.9 vai cair aqui automaticamente!
System.out.println("O estudante teve média " + media + " e está de recuperação.");
} else {
// Menor que 5.0 (Reprovado)
}
Uma última observação bem simples: o nome da sua classe está como ParImpar, mas o exercício é sobre aprovação de alunos. Lembre-se de ajustar o nome da classe para algo que combine com o objetivo do código, ajudando na organização do seu portfólio!
Espero que possa ter lhe ajudado!