Ciao,
ho riscritto il codice orientato agli oggetti con una classe che rappresenta lo pagella e una classe con il main() che esegue le operazioni di inserimento, lettura e media voti per lo studente:
EDIT: ho modificato la classe Pagella per ritornare la media in virgola mobile (double) e la lista dei voti per materia in ordine decrescente
Demo.java
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.HashMap;
import java.util.Map;
public class Demo {
public static final String[] MATERIE = { "Italiano", "Storia", "Matematica",
"Inglese", "Informatica", "Sistemi",
"Tpsit", "ED.fisica" };
public static void main(String[] args) throws IOException {
Map<String, Integer> voti = new HashMap<>();
String nome;
String cognome;
Pagella pagella = new Pagella();
System.out.println("Inserisci il nome: ");
BufferedReader inputNome = new BufferedReader(new InputStreamReader(System.in));
nome = inputNome.readLine();
System.out.println("Inserisci il cognome: ");
BufferedReader inputCognome = new BufferedReader(new InputStreamReader(System.in));
cognome = inputCognome.readLine();
LOOP: while (true) {
System.out.println(
"*******************\n" +
"1)Inserimento\n" +
"2)Visualizzazione\n" +
"3)Media\n" +
"4)Fine\n" +
"*******************\n" +
"inserisci da dove vuoi cominciare: ");
BufferedReader inputScelta = new BufferedReader(new InputStreamReader(System.in));
String scelta = inputScelta.readLine();
switch (scelta) {
// Insert
case "1":
System.out.println("Inserisci i voti (da 0 a 10) per le materie: ");
for (String materia : MATERIE) {
System.out.println("-> " + materia + ": ");
BufferedReader inputVoto = new BufferedReader(new InputStreamReader(System.in));
Integer voto = Integer.parseInt(inputVoto.readLine());
voti.put(materia, voto);
}
pagella.setNome(nome);
pagella.setCognome(cognome);
pagella.setVoti(voti);
System.out.println("Voti salvati..\n");
continue;
// Show
case "2":
System.out.println("Voti per " + pagella.getNome() + " " + pagella.getCognome() + ": ");
Map<String, Integer> getVoti = new HashMap<>();
getVoti = pagella.getVoti();
for (String materia : getVoti.keySet()) {
Integer voto = getVoti.get(materia);
System.out.println(materia + " " + voto);
}
continue;
// Average
case "3":
System.out.println("Media voti per " + pagella.getNome() + " " + pagella.getCognome() + ": ");
System.out.println(pagella.getMedia());
continue;
// Exit
case "4":
break LOOP;
}
}
System.out.println("Uscita dal programma...");
}
}
Pagella.java
import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.Map;
import static java.util.stream.Collectors.*;
import java.util.Collections;
public class Pagella {
private String nome, cognome;
private Map<String, Integer> voti;
public Pagella() {
voti = new HashMap<String, Integer>();
}
public Pagella(String nome, String cognome, Map<String, Integer> voti) {
this();
this.nome = nome;
this.cognome = cognome;
this.voti = voti;
}
public String getNome() {
return nome;
}
public void setNome(String nome) {
this.nome = nome;
}
public String getCognome() {
return cognome;
}
public void setCognome(String cognome) {
this.cognome = cognome;
}
public Map<String, Integer> getVoti() {
Map<String, Integer> sorted = voti.entrySet().stream()
.sorted(Collections.reverseOrder(Map.Entry.comparingByValue()))
.collect(toMap(Map.Entry::getKey, Map.Entry::getValue, (e1, e2) -> e2, LinkedHashMap::new));
return sorted;
}
public void setVoti(Map<String, Integer> voti) {
this.voti = voti;
}
public double getMedia() {
int sommavoti = 0;
for (int v : voti.values()) {
sommavoti = sommavoti + v;
}
return (double) sommavoti / voti.values().size();
}
@Override
public String toString() {
return "Pagella [nome=" + nome + ", cognome=" + cognome + ", voti=" + voti + "]";
}
}
Saluti,