Ir ao conteúdo

Posts recomendados

Postado

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!");
    }

}
}

 

  • Moderador
Postado

@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

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...

LANÇAMENTO!

eletronica2025-popup.jpg


CLIQUE AQUI E BAIXE AGORA MESMO!