Programa: Diz se você passou, ficou de recuperação ou reprovou


Problema: Crie um programa que recebe uma nota ( pela classe Scanner) e checa se você passou direto, ficou de recuperação ou foi reprovado na matéria.
A regra é a seguinte:
Nota 7 ou mais: passou direto
Entre 5 e 7: tem direito de fazer uma prova de recuperação
Abaixo de 5: reprovado direto

Aplicativo em Java

Vamos fazer isso usando condições, testando com IF ELSE em Java o que foi digitado pelo usuário. No caso, a nota.
Vamos colocar if dentro de if, essa técnica se chama aninhar (nested).

Vou dar uma importante dica que você vai usar por toda sua vida de programador, que é uma das
maiores lições que sei e posso passar:

"Um problema difícil nada mais é que uma série de pequenos problemas fáceis."

E qual pra transformar um problema difícil em fáceis?
Usando a técnica de Jack, o estripador: por partes. Quebre o programa.

Todo e qualquer projeto, desde esse que vou passar até os da NASA, são divididos em área, partes...na criação de um jogo, tem gente especializada até no desenho das árvores, no barulho das armas e se o eco vai ser realista.

Ok, vamos lá.
Criar um programa que recebe uma nota do usuário você já sabe, é só usar a classe Scanner.

Mas o nosso curso vai ser focado nas boas práticas, vamos focar em criar aplicações robustas.
O que é isso?
Vamos minimizar o máximo possível os possíveis problemas que possam aparecer quando usuário for usar o problema.

Parte 1: Tendo a certeza que o usuário vai digitar uma nota válida

Você pensou nisso? E se o energúmeno digitar 11 ou -1.1 ?
Não pode.

O primeiro passo da nossa aplicação é ter a certeza que ele vai digitar uma nota ENTRE 0.0 e 10.0!
Se for 0.0 até 10.0, ok, e se não for? Acaba o programa.
Fica assim:

public class PasseiOuNao {
    public static void main(String[] args) {
        float nota; //vai armazenar a nota
        Scanner entrada = new Scanner(System.in);
        
        System.out.print("Digite sua nota [0.0 - 10.0]: " );
        nota = entrada.nextFloat();
        
        if( (nota <= 10.0) && (nota >= 0.0) ){
            System.out.println("Nota válida");
        } else {
            System.out.println("Nota inválida, fechando aplicativo");
        }
            
       
    }
}


O que fizemos foi certificar que a nota é menor que 10.0 E maior 0.0 !
Os dois casos precisam ser satisfeitos, por isso o operador lógico &&.

Teste. Coloque 10.1, 10.5, 21.12, -19, -0.000001, "java progressivo".
Você tem que fazer muito isso: testar.
Nas grandes empresas tem gente contratada só pra isso: testar (estagiários ou bolsistas).

Eliminada as possibilidades de notas absurdas, prossigamos.

Parte 2: Checando se passou direto

Vamos colocar mais um if else que vai checar se o aluno passou direto ou não.
Por hora, esqueça o código feito.

Como seria esse código pra testar se ele passou direto? Fácil:

if( nota >= 7.0 ){
          System.out.println("Parabéns, você passou direto. Já sei, você programa em Java?");
}
else {
          System.out.println("Não passou direto");
}


Vamos colocar esse trecho de código abaixo daquele print que diz 'nota válida'.
Então, vamos pensar como o Java pensa:

Primeiro ele recebe o resultado.
Checa se está entre 0.0 e 10.0. Se não está, pula pro else e terminou o programa.

Se estiver entre 0.0 e 10.0, diz que a nota é válida e depois faz outro teste em outro if, pra checar se a nota é maior que 7.0, se for diz passou direto, se não for diz que não passou direto.

O código ficaria assim:

import java.util.Scanner;

public class PasseiOuNao {
    public static void main(String[] args) {
        float nota; //vai armazenar a nota
        Scanner entrada = new Scanner(System.in);
     
        System.out.print("Digite sua nota [0.0 - 10.0]: " );
        nota = entrada.nextFloat();
     
        if( (nota <= 10.0) && (nota >= 0.0) ){
            System.out.println("Nota válida");
         
            if( nota >= 7.0 ){
                System.out.println("Parabéns, você passou direto. Por acaso você programa em Java?");
            }
            else {
                System.out.println("Não passou direto");
            }
         
        }
        else {
            System.out.println("Nota inválida, fechando aplicativo");
        }
           
    }
}

Teste.
Note que o Java não perdoa. Se tirar 6.99 não passa direto!

Parte 3: Checando se você ainda há esperanças

Bom, agora vamos checar se o aluno ainda pode fazer recuperação, ou seja, se a nota está entre 5.0 e é menor que 7.0.
Caso seja exatamente 7.0, passará automaticamente.
O código pra essa parte é o seguinte:

if( nota >= 5.0 ){
       System.out.println("Vai ter que fazer recuperação");
}
else {
       System.out.println("Reprovado. Ainda bem que é só simulação, hein?");
}


Note que se não for maior ou igual a 5.0, é menor, então vai pro else.
Ora, se é menor, foi reprovado. Então o else manda mensagem de reprovação.
A pergunta é, onde vamos inserir esse código?
No else do trecho 'Não passou direto'

Então, o código completo fica:


import java.util.Scanner;

public class PasseiOuNao {
    public static void main(String[] args) {
        float nota; //vai armazenar a nota
        Scanner entrada = new Scanner(System.in);
     
        System.out.print("Digite sua nota [0.0 - 10.0]: " );
        nota = entrada.nextFloat();
     
        if( (nota <= 10.0) && (nota >= 0.0) ){
         
            if( nota >= 7.0 ){
                System.out.println("Parabéns, você passou direto. Por acaso você programa em Java?");
            }
            else {
             
                if( nota >= 5.0 ){
                    System.out.println("Vai ter que fazer recuperação");
                }
                else {
                    System.out.println("Reprovado. Ainda bem que é só simulação, hein?");
                }
            }
         
        }
        else {
            System.out.println("Nota inválida, fechando aplicativo");
        }
         
     
    }
}

O Java lê e interpreta seguindo esses passos:

1; Primeiro checa se a nota é válida (se está entra 0 e 10)
Se não está, vai pro else, que termina o programa.
Se está, vai pro próximo if, que é o passo 2.

2. Checa se tirou mais que 7.0 através do próximo if
Se sim, ele passa direto e termina o programa.
Se não tirou mais que 7.0, vai pro else, que é o passo 3.

3. Checa se tirou mais que 5.0 através do próximo if
Se sim, diz que ficou de recuperação e termina o programa.
Se não, vai pro else, que diz que foi reprovado e terminou o programa.


Por questão de organização, coloque os pares if-else na mesma linha vertical, veja como fica mais organizado, e assim você vai saber à qual if o else pertence (sim, você pode se confundir).
Pintei os pares correspondentes para ficar mais claro.
Isso se chama identação!

Exercício:
Refaça o mesmo problema.
Teste se a nota está entre 0.0 e 10.0.
Depois se foi reprovado direto, se sim, termina o programa. 
Se não, vai pra outro if pra saber se está de recuperação. Se estiver, termina.
Se não estiver de recuperação, vai pro else que diz que ele passou direto.

Ou seja, é o mesmo problema, mas com a lógica ao contrário.
Obviamente, deve funcionar da mesma maneira.
Isso vai mostrar como um mesmo problema pode ser feito de várias maneiras.

Dicas e Novidades de Java por e-mail

Sabe quanto custa um bom livro de java?
Entre R$ 100,00 e R$300,00

Sabe quanto custa um bom curso presencial de Java?
Entre R$ 1.500,00 até R$ 4.000,00

Sabe quanto custa estudar pelo Java Progressivo?
Absolutamente nada.

Porém, também precisamos de sua ajuda e apoio.
Para isso, basta curtir nossa Fan Page e clicar no botão G+ do Google.