GUJ Discussões   :   últimos tópicos   |   categorias   |   GUJ Respostas

Array

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?

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

}

Qual seria o erro?

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
//