Ir ao conteúdo
  • Cadastre-se

Java Dificuldade em uma questão de If/Else


Posts recomendados

Preciso de ajuda com essa questão

 

4)O programa deve resolver o seguinte problema:
Em uma escola um aluno precisa obter a media 6 nas 2 primeiras notas para passar de ano. Caso a
media das notas seja inferior a 6 ele terá que fazer a recuperação e obter os pontos restantes para
passar. A regra é a seguinte:

 

MEDIA = ( NOTA1 + NOTA2 ) / 2;
MEDIA >= 6 : PASSOU
MEDIA < 6 : FAZ RECUPERACAO
MEDIA = NOTA1 + NOTA2 + RECUPERACAO
MEDIA >= 6 : PASSOU
MEDIA < 6 : REPROVADO

 

só posso usar a estrutura de condição If/Else
eu fiz esse programa, porém mesmo que a média tenha sido acima de 6, aparece para colocar a nota de recuperação no console

 

segue o programa abaixo:

 

package quarta;

import java.util.Scanner;

public class Quarta {

public static void main(String[] args) {
    Scanner p = new Scanner(System.in);
    System.out.println("Qual a primeira nota?");
    double n1 = p.nextDouble();
    System.out.println("Qual a segunda nota?");
    double n2 = p.nextDouble();
    double m = ((n1 + n2) / 2);
    if (m >=6) {
        System.out.println("O aluno passou de ano.");
    } else {
        System.out.println("O aluno vai ter que fazer recuperação.");
    }
    Scanner a = new Scanner(System.in);
    System.out.println("Qual a nota de recuperação?");
    double r = a.nextDouble();
    double mr = (n1 + n2 + r);
    if (mr >= 6) {
        System.out.println("O aluno passou!");
    } else if (mr < 6) {
        System.out.println("O aluno reprovou!");
    }

}
}

 

Link para o comentário
Compartilhar em outros sites

  • Moderador

@AngeloMarc Olá, seja bem vindo em nosso Fórum do Clube do Hardware.

 

Você tem ali alguns erros. 

Para usar o nextDouble()  tens que setar o Locale.US e importando sua biblioteca com  import java.util.Locale;

 

Outro erro que vejo, é que você está instanciando um novo objeto do Scanner e tentando comparar a média da recuperação, fora da cadeia de if do primeiro teste.

Para pedir a nota da recuperação somente se quando for menos que 6, deve-se por o teste do IF da recuperação no bloco de ELSE do teste se o usuário passou o foi para recuperação.

 

Ademais, creio que a fórmula da média da recuperação também está errada.  Não pode ser Nota 1 + Nota 2 + Recuperação.

Porque vai estrapolar o limite de nota de um boletim escolar que normalmente vai até 10.

Nesse caso você deve fazer  Média da recuperação = Média + Recuperação.

 

Aqui está o algoritmo corrigido:

package quarta;

import java.util.Locale;
import java.util.Scanner;

/**
 *
 * @author DIF
 */
public class Quarta {

    public static void main(String[] args) {
        //Instacia o objeto da classe Scanner
        Scanner entrada = new Scanner(System.in);
      
        //Define o Locale.US(para usar o nextDouble()
        entrada.useLocale(Locale.US);

        //Define as variáveis e inicializadas.
        double nota1 = 0.0;
        double nota2 = 0.0;
        double notaRecuperacao = 0.0;
        double media = 0.0;
        double mediaRecuperacao = 0.0;

        //Primeira Nota
        System.out.print("Qual a primeira nota? ");
        nota1 = entrada.nextDouble();

        //Segunda Nota
        System.out.print("Qual a segunda nota? ");
        nota2 = entrada.nextDouble();

        //Calcula a média entre as duas notas
        media = ((nota1 + nota2) / 2);

        //Testa se a média foi maior ou igual a 6
        if (media >= 6) {
            System.out.println("A média final foi: " + media);
            System.out.println("O aluno passou de ano!");
        } else {
            System.out.println("A média final foi: " + media);
            System.out.println("O aluno vai ter que fazer recuperação.");
          
            //Pergunta qual a nota da recuperação caso a média seja menor que 6
            System.out.print("Qual a nota da recuperação? ");
            notaRecuperacao = entrada.nextDouble();
          
            //Calcula a média final baseado na média anterior + a nota da recuperação
            mediaRecuperacao = (media + notaRecuperacao);

            //Testa se a média Final é maior ou igual a 6 
            if (mediaRecuperacao >= 6) {
                System.out.println("A média final foi: " + mediaRecuperacao);
                System.out.println("O aluno passou de ano!");
            } else {
                System.out.println("A média final foi: " + mediaRecuperacao);
                System.out.println("O aluno reprovou!");
            }
        }

    }

}

Basicamente só acrescentei ali a impressão em tela das médias.

 

Um detalhe bem importante. Caso você não queria usar o Locale.US,  você pode converter de nextLine() para NextDouble() desta forma:

nota1 = Double.parseDouble(entrada.nextLine());
nota2 = Double.parseDouble(entrada.nextLine());
notaRecuperacao = Double.parseDouble(entrada.nextLine());

Dá na mesma.... por simplicidade, eu prefiro setar o Locale.US

Link para o comentário
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...