Comecei a estudar Analise e Desenvolvimentos de Sistemas e estamos na parte de arrays. Os professores passaram uma série de exercicios e eu estou com bastante dúvidas, já fiz o primeiro, mas está dando erro, vocês conseguem me ajudar?
- Faça um programa que leia um vetor com as notas de 10 alunos e imprima a maior e a menor notas, bem como quais os alunos que obtiveram essas notas.
RESPOSTA:
Scanner leitor = new Scanner(System.in);
String[] nome = new String[3];
double[] nota = new double[3];
double menorNota = 0;
double maiorNota = 0;
for (int i = 0; i < 3; i++) {
System.out.println("Digite o nome n" + (i + 1) + "º : ");
nome[i] = leitor.next();
System.out.println("Digite a nota do nome n" + (i + 1) + "º : ");
nota[i] = leitor.nextDouble();
}
for (int i = 0; i < 3; i++) {
if (maiorNota > nota[i]) {
maiorNota = nota[i];
} else {
menorNota = nota[i];
}
System.out.println("O aluno " + nome[i] + " tirou" + menorNota + " e possui a menor nota.");
System.out.println("O aluno " + nome[i] + " tirou" + maiorNota + " e possui a maior nota.");
}
}
}
O resultado tá saindo assim:
O aluno teste tirou15.0 e possui a menor nota.
O aluno teste tirou0.0 e possui a maior nota.
O aluno testee tirou25.0 e possui a menor nota.
O aluno testee tirou0.0 e possui a maior nota.
O aluno testeee tirou9.0 e possui a menor nota.
O aluno testeee tirou0.0 e possui a maior nota.
Esse código sempre vai retornar que a maior nota é 0, isso porque você errou o operador >
no if
:
if (maiorNota > nota[i]) {
maiorNota = nota[i]
}
maiorNota
inicializa com 0, então ela nunca vai ser maior do que alguma nota. Seu if deve ficar assim:
if (maiorNota < nota[i]) {
maiorNota = nota[i];
}
Agora o else
. maiorNota
ser maior do que alguma nota (seria o else desse if que eu te passei acima) não significa que essa nota é a menor do Array. Pra fazer essa checagem você precisa de outro if
:
if (menorNota > nota[i]){
menorNota = nota[i];
}
Mas para isso funcionar você não pode inicializar menorNota
com 0, senão essa condição nunca vai ser verdadeira.
Mudei os que me mandou, mas continua dando errado porque está mostrando os três resultados e pegando o dos outros.
Ficou assim:
Scanner leitor = new Scanner(System.in);
String[] nome = new String[3];
double[] nota = new double[3];
**double menorNota = 100, maiorNota = nota[0];**
for (int i = 0; i < 3; i++) {
System.out.println("Digite o nome n" + (i + 1) + "º : ");
nome[i] = leitor.next();
System.out.println("Digite a nota do nome n" + (i + 1) + "º : ");
nota[i] = leitor.nextDouble();
}
for (int i = 0; i < 3; i++) {
if (maiorNota < nota[i]) {
maiorNota = nota[i];
}
if (menorNota > nota[i]){
menorNota = nota[i];
}
System.out.println("O aluno " + nome[i] + " tirou" + menorNota + " e possui a menor nota.");
System.out.println("O aluno " + nome[i] + " tirou" + maiorNota + " e possui a maior nota.");
}
}
O resultado está saindo assim:
O aluno Teste tirou10.0 e possui a menor nota.
O aluno Teste tirou10.0 e possui a maior nota.
O aluno Testee tirou10.0 e possui a menor nota.
O aluno Testee tirou15.0 e possui a maior nota.
O aluno Testeee tirou9.0 e possui a menor nota.
O aluno Testeee tirou15.0 e possui a maior nota.
Você pode usar duas variáveis: alunoMaiorNota
que vai armazenar o nome do aluno com a maior nota e alunoMenorNota
que vai armazenar o nome do aluno com menor nota.
Nos if
de verificação:
if (maiorNota < nota[i]) {
maiorNota = nota[i];
alunoMaiorNota = nome[i];
}
if (menorNota > nota[i]){
menorNota = nota[i];
alunoMenorNota = nome[i];
}
Tire essas linhas de dentro do for
e substitua nome[i]
pelas variáveis alunoMenorNota
e alunoMaiorNota
.
1 curtida
Deu certo. Muito obrigada!!
1 curtida