Importante

Você está vendo a versão anterior da nova experiência da Alura que estamos preparando para você. Em breve, ela ganha uma identidade visual novinha totalmente pensada em potencializar seus estudos!

1
resposta

[Projeto] Exercício 6

import java.util.Scanner;

public class ParImpar {

    public static void main(String[] args) {
        double media = 4;

        if(media >= 7){
            System.out.printf("O estudante teve média "+ media + " e foi aprovado.");
        }else if(media >=5 && media >=6.9){
            System.out.println("O estudante teve média "+ media + " e esta de recuperacao.");
        }else{
            System.out.println("O estudante teve media "+ media + " e foi reprovado");
        }
    }
}
1 resposta

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!