package estruturasDeControle;
import java.util.Scanner;
public class ExercicioAlunos {
public static void main(String[] args) {
Scanner entrada = new Scanner(System. in );
double nota= 0;
double soma = 0;
int i;
System. out .println(“Digite as 3 notas do aluno”);
for (i = 3; i > 0; i --) {
if (nota >= 0 && nota <= 10) {
nota = entrada.nextDouble();
soma += nota;}}
double media = soma / 3;
if (media >= 7)
System. out .println(“o aluno está aprovado”);
if ( media >= 5 && media < 7)
System. out .println(“O aluno esta em recupercao”);
if ( media < 5 )
System. out .println(“O aluno foi reprovado”);
entrada.close();
}
}
Não entendi qual é a dúvida…
Mas aproveitando, use else if que fica melhor.
Da forma que você fez, ele sempre testa os 3 if's, o que não sentido, já que ele só pode cair em um deles.
Por exemplo, se a média for 8, o seu código testa se é maior ou igual a 7 e imprime a mensagem.
Depois, ele testa se está entre 5 e 7, mas para que testar isso se já vimos que é maior que 7? É redundante, por isso fica melhor colocar um else (pois se entrar no primeiro if, ele nem testa os demais).
Ou seja:
if (media >= 7)
System.out.println("o aluno está aprovado");
else if (media >= 5)
System.out.println("O aluno esta em recupercao");
else
System.out.println("O aluno foi reprovado");
Primeiro testa se é maior ou igual a 7. Se for, imprime a mensagem (“aprovado”) e não testa mais nada.
Se for menor que 7, ele cai no else if, e se chegou aqui é porque com certeza é menor que 7, então não preciso testar isso de novo: só preciso ver se é maior ou igual a 5 (se não fosse menor que 7, teria entrado no primeiro if).
Por fim, se não for maior ou igual a 5, ele cai no último else - e se chegou ali é porque com certeza é menor que 5, então não preciso testar isso de novo.
1 curtida
Obrigado Hugo, fiz como você sugeriu e tentei dar uma melhorada. A pergunta sobre o Scanner é que ele fica com o aviso de que nunca será fechado toda vez que coloco o for.
System. out .println(“Digite as 3 notas do aluno”);
for (i = 0; i < 3 ; ++i) {
nota = entrada.nextDouble();
if (nota >= 0 && nota <= 10 )
soma += nota;
else break;
}
media = soma / i;
if (nota >= 0 && media <= 5 )
System. out .println(“O aluno esta Reprovado”);
else if ( media > 5 && media < 7 )
System. out .println(“O aluno está em recuperação”);
else if ( media >= 7 )
System. out .println(“O aluno passou por média”);
else System. out .println(“Nota errada”);
Nem dá bola, o compilador aponta esse warning pois o Scanner implementa Closeable.
Acontece que o seu Scanner lê o System.in e não se deve fechar o System.in.
Pra não ter mais esse warning, declara seu Scanner como atributo estático da sua classe.
3 curtidas
Coloquei como estático como você falou e deu certo!
Obrigado Staroski!