Então, estou fazendo um código que lê as notas de n alunos, que devem ser entre 0 e 100, e imprima quantas vezes cada nota foi repetida, porém não estou conseguindo imprimir o valor corretamente, como eu poderia fazer isso? Segue o código que eu fiz:
import java.util.Scanner;
public class ExercicioVetor01 {
public static void main(String[] args) {
Scanner ler = new Scanner(System.in);
System.out.println("Informe o número de alunos: ");
int n = ler.nextInt();
int contador = 1;
int alunos[] = new int[n];
for (int i = 0; i < alunos.length; i++) {
System.out.println("Digite a nota do aluno " + (i + 1) + ": ");
alunos[i] = ler.nextInt();
}
for (int j = 0; j <= 100; j++) {
for (int i = 0; i < alunos.length; i++) {
if (alunos[i] == j) {
System.out.println("A nota " + j + " apareceu " + contador + " vezes!");
contador++;
}
}
}
}
}
Informe o número de alunos:
2
Digite a nota do aluno 1:
10
Digite a nota do aluno 2:
10
A nota 0 apareceu 3 vezes!
A nota 1 apareceu 5 vezes!
Exception in thread “main” java.lang.ArrayIndexOutOfBoundsException: 2
at exerciciovetor01.ExercicioVetor01.main(ExercicioVetor01.java:19)
C:\Users\Artur Pereira\AppData\Local\NetBeans\Cache\8.1\executor-snippets\run.xml:53: Java returned: 1
FALHA NA CONSTRUÇÃO (tempo total: 3 segundos)
Agora tá dando assim:
Informe o número de alunos:
2
Digite a nota do aluno 1:
10
Digite a nota do aluno 2:
10
A nota 10 apareceu 3 vezes!
A nota 10 apareceu 2 vezes!
É… melhor você criar um outro vetor só com as notas…
int alunos[] = new int[n];
int notas[] = new notas[101]; //0-100 certo?
for (int i = 0; i < alunos.length; i++) {
System.out.println("Digite a nota do aluno " + (i + 1) + ": ");
int nota = ler.nextInt();
alunos[i] = nota;
notas[nota]++;
}
for (int i = 0; i <= 100; i++) {
System.out.println("A nota " + i + " apareceu " + notas[i] + " vezes!");
}
Perceba que assim ele vai imprimir todas as notas, informando a quantidade de cada uma, se quiser imprimir apenas as notas digitadas, precisa colocar um if no segundo for…
Por favor teste esse código que coloquei acima e me dê um feedback, acho que agora está certo, pois estou zerando o índice do vetor das notas a cada ciclo, qualquer dúvida só perguntar.
Observações pessoais:
a) … um código que lê as notas de n alunos, que devem ser entre 0 e 100;
Obs.: são de 0 a 100 alunos.
b) e imprima quantas vezes cada nota foi repetida.
Fim das observações.
Para fins de contagem utilizei a classe Map pois não considero interessante desenvolver uma metódologia mais complexa para contabilizar as notas repetidas, por preferir menos linhas de código.
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
System.out.println("Informe quantas notas serão adicionadas.\nMinimo 1, máximo 100.");
float notas[] = new float[scan.nextInt()];
if (notas.length > 0 && notas.length < 101) {
for (int i = 0; i < notas.length; i++) {
System.out.println("Informe a nota do" + (i + 1) + "º aluno");
notas[i] = scan.nextFloat();
}
//para gerenciar as notas será utilizada a classe Map, pois ela não admitirá notas repetidas para fins de contagem
Map<Float, Integer> contabilizarNotas = new TreeMap();//Float será a nota que servirá de chave e Integer o contador
for (int i = 0; i < notas.length; i++) {
contabilizarNotas.putIfAbsent(notas[i], 0);//nesta instrução a nota só será adicionada se não constar na coleção
contabilizarNotas.put(notas[i], contabilizarNotas.get(notas[i]) + 1);//toda vez que uma nota se repete a quantidade é atualizada
}
for (Float chave : contabilizarNotas.keySet()) {//percorrendo todas as notas na coleção, elas também são chaves únicas
System.out.println("A nota: " + chave + ", se repete: " + contabilizarNotas.get(chave));//notas.get(chave) imprime o total de repetições
}
}
}