Ir ao conteúdo
  • Comunicados

    • Gabriel Torres

      Seja um moderador do Clube do Hardware!   12-02-2016

      Prezados membros do Clube do Hardware, Está aberto o processo de seleção de novos moderadores para diversos setores ou áreas do Clube do Hardware. Os requisitos são:   Pelo menos 500 posts e um ano de cadastro; Boa frequência de participação; Ser respeitoso, cordial e educado com os demais membros; Ter bom nível de português; Ter razoável conhecimento da área em que pretende atuar; Saber trabalhar em equipe (com os moderadores, coordenadores e administradores).   Os interessados deverão enviar uma mensagem privada para o usuário @Equipe Clube do Hardware com o título "Candidato a moderador". A mensagem deverá conter respostas às perguntas abaixo:   Qual o seu nome completo? Qual sua data de nascimento? Qual sua formação/profissão? Já atuou como moderador em algo outro fórum, se sim, qual? De forma sucinta, explique o porquê de querer ser moderador do fórum e conte-nos um pouco sobre você.   OBS: Não se trata de função remunerada. Todos que fazem parte do staff são voluntários.
    • DiF

      Poste seus códigos corretamente!   21-05-2016

      Prezados membros do Fórum do Clube do Hardware, O Fórum oferece um recurso chamado CODE, onde o ícone no painel do editor é  <>     O uso deste recurso é  imprescindível para uma melhor leitura, manter a organização, diferenciar de texto comum e principalmente evitar que os compiladores e IDEs acusem erro ao colar um código copiado daqui. Portanto convido-lhes para ler as instruções de como usar este recurso CODE neste tópico:  
AngeloMarc

Java Dificuldade em uma questão de If/Else

Recommended Posts

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

}
}

 

Compartilhar este post


Link para o post
Compartilhar em outros sites
Postado (editado)

@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

Editado por DiF

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário






Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações 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

×