Vector help in Java

Asked

Viewed 95 times

1

Guys, I wonder if you have any function ready in Java or some easy way to make the name of the students with the highest grades appear together, because you’re always getting the last student with the highest grade, even if two students get the same grade.

package application;

import java.util.Locale;
import java.util.Scanner;

public class Program {

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        Locale.setDefault(Locale.US);
        
        String[] nomeAlunos = new String[10];       
        nomeAlunos[0] = "Roberto";
        nomeAlunos[1] = "Carlos";
        nomeAlunos[2] = "Flavia";
        nomeAlunos[3] = "Vitor";
        nomeAlunos[4] = "Higor";
        nomeAlunos[5] = "Luiza";
        nomeAlunos[6] = "Joana";
        nomeAlunos[7] = "Isaque";       
        nomeAlunos[8] = "Gabriela"; 
        nomeAlunos[9] = "Antony";

        Double[] notaAlunos = new Double[10];
        double mediaNotas = 0, porcentAprovado, porcentReprovado;
        int[] freqAlunos = new int[10];
        int aprovados = 0, reprovados = 0, notaAprovacao = 70, freqAprovacao = 80;
        
        for(int i = 0; i < nomeAlunos.length; i++) {
            System.out.print("Aluno: ");
            System.out.println(nomeAlunos[i]);
            System.out.print("Entre com a nota (0-100): ");
            notaAlunos[i] = sc.nextDouble();
            mediaNotas += notaAlunos[i];
                while(notaAlunos[i] < 0 || notaAlunos[i] > 100) {
                    System.out.print("Valor não aceito, digite novamente. ");
                    notaAlunos[i] = sc.nextDouble();
                }
            System.out.print("Entre com a frequência (0-100): ");
            freqAlunos[i] = sc.nextInt();
            System.out.println("");
                while(freqAlunos[i] < 0 || freqAlunos[i] > 100) {
                    System.out.print("Valor não aceito, digite novamente. ");
                    freqAlunos[i] = sc.nextInt();

                }
        }
        
        System.out.println("Aprovados: ");
        for(int i = 0; i < nomeAlunos.length; i++) {
            if(notaAlunos[i] >= notaAprovacao && freqAlunos[i] >= freqAprovacao) {
                aprovados += 1;
                System.out.print("Nome: " + nomeAlunos[i] + ", Nota: " + notaAlunos[i] + ", Frequência: " + freqAlunos[i] + "%");
                System.out.println();
                System.out.println();
            }
        }

        System.out.println("Reprovados: ");
        for(int i = 0; i < nomeAlunos.length; i++) {
            if(notaAlunos[i] < notaAprovacao || freqAlunos[i] < freqAprovacao) {
                reprovados += 1;
                System.out.print("Nome: " + nomeAlunos[i] + ", Nota: " + notaAlunos[i] + ", Frequência: " + freqAlunos[i] + "%");
                System.out.println();
                System.out.println();
            }
        }
        
        Double maiorNota = notaAlunos[0], menorNota = notaAlunos[0];
        String nomeMaiorNota = "", nomeMenorNota = "";
        
        for(int i = 0; i < notaAlunos.length; i++) {
            if (notaAlunos[i] >= maiorNota) {
                maiorNota = notaAlunos[i];
                nomeMaiorNota = nomeAlunos[i];
            }
            if(notaAlunos[i] <= menorNota) {
                menorNota = notaAlunos[i];
                nomeMenorNota = nomeAlunos[i];
            }
        }
        
        
        System.out.println("Aluno com a maior nota: "); 
        System.out.println("Nome: " + nomeMaiorNota);
        System.out.println("Nota: " + maiorNota);
        System.out.println();
        
        System.out.println("Aluno com a menor nota: "); 
        System.out.println("Nome: " + nomeMenorNota);
        System.out.println("Nota: " + menorNota);
        System.out.println();
        
        porcentAprovado = aprovados * 10;
        porcentReprovado = reprovados * 10;
        System.out.println("Porcentagem de alunos aprovados: " + porcentAprovado + "%");
        System.out.println("Porcentagem de alunos reprovados: " + porcentReprovado + "%");
        System.out.println();
        
        System.out.println("Media de notas na turma: " + mediaNotas / 10);
        
        
        
                
        sc.close();
    }

}

1 answer

3

First, if you want to create an array with fixed values, you can do so:

String[] nomeAlunos = { "Roberto", "Carlos", "Flavia", "Vitor", "Higor", "Luiza", "Joana", "Isaque", "Gabriela", "Antony" };

If you want all students who have had the highest or lowest grade, the way is to first calculate which is the highest (and the lowest) grade, and then go through the array of grades and see all students who have this grade.

Another detail, to check the highest and lowest note you start the variables maiorNota and menorNota with the first note, then in for you can start from the second note:

double maiorNota = notaAlunos[0], menorNota = notaAlunos[0];
for (int i = 1; i < notaAlunos.length; i++) { // "i" começa em 1 (a partir do segundo elemento)
    if (notaAlunos[i] > maiorNota) {
        maiorNota = notaAlunos[i];
    }
    if (notaAlunos[i] < menorNota) {
        menorNota = notaAlunos[i];
    }
}

For if i start from scratch, in the first iteration you will compare the first note with itself, which is redundant and unnecessary.

I also changed the type of Double (with a capital "D") for double (with a tiny "d"), as there seems to be no reason to use the Wrappers (read here for more details).

Anyway, having the highest and lowest note, I can print out all the names that have these notes:

System.out.println("Alunos com a maior nota (" + maiorNota +"): ");
for (int i = 0; i < notaAlunos.length; i++) {
    if (notaAlunos[i] == maiorNota) {
        System.out.println(nomeAlunos[i]);
    }
}

System.out.println("Alunos com a menor nota (" + menorNota +"): ");
for (int i = 0; i < notaAlunos.length; i++) {
    if (notaAlunos[i] == menorNota) {
        System.out.println(nomeAlunos[i]);
    }
}

Browser other questions tagged

You are not signed in. Login or sign up in order to post.