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 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.
4 comentários:
Para usar If/Else preciso da importação import java.util.Scanner;?
Costumo usar "JOptionPane" e fiquei em dúvida.
uso show.InputDialog e show.MessageDialog no lugar de " System.out.println"
Para usar If/else não precisa fazer import é uma funcionalidade ja inclusa na linguagem.
import java.util.Scanner;
public class IfElse{
public static void main(String[] args){
int nota1 = 0;
int nota2 = 0;
int nota3 = 0;
int nota4 = 0;
float media = 0;
Scanner entrada = new Scanner(System.in);
System.out.println("Digite a primeira nota: ");
nota1 = entrada.nextInt();
System.out.println("Digite a segunda nota do aluno: ");
nota2 = entrada.nextInt();
System.out.println("Digite a terceira nota do aluno: ");
nota3 = entrada.nextInt();
System.out.println("Digite a quarta nota do aluno : ");
nota4 = entrada.nextInt();
if(nota1 <=10 && nota1 >=0 && nota2 <=10 && nota2 >=0 && nota3 <=10 && nota3 >=0 && nota4 <=10 && nota4 >=0){
System.out.println("Nota válida!");
media = (nota1 + nota2 + nota3 + nota4) / 4;
if(media <=4){
System.out.println("O aluno infelizmente foi reprovado!");
}else if(media >= 5 && media <=6){
System.out.println("O aluno tem o direito de fazer prova de recuperação");
}
else{
System.out.println("O aluno foi aprovado!!!");
}
}else{
System.out.println("Nota inválida");
}
}
}
import java.util.Scanner;
public class Aprovado {
public static void main(String[] args) {
float nota;
Scanner entrada = new Scanner(System.in);
System.out.println("Digite sua nota: ");
nota = entrada.nextFloat();
if (nota>=0.0 && nota <=10.0){
if(nota >= 7.0) {
System.out.println("Você está aprovado");
}else if (nota >= 5 ){
System.out.println("Voce tem direito a fazer uma prova de recuperação");
}else {
System.out.println("Você está reprovado");
}
}else
System.out.println("Nota inválida");
}
}
Postar um comentário