package preparazione_esame; import java.io.BufferedReader; import java.io.FileNotFoundException; import java.io.FileReader; import java.io.FileWriter; import java.io.IOException; import java.io.PrintWriter; import java.util.ArrayList; import java.util.Collections; import java.util.HashMap; public class Esame4 { public static void main(String[] args) { HashMap> personePunteggi = new HashMap<>(); HashMap> punteggiPersone = new HashMap<>(); try (BufferedReader br = new BufferedReader(new FileReader("src/preparazione_esame/esame4.txt")); PrintWriter pw1 = new PrintWriter(new FileWriter("esame4-1.txt")); PrintWriter pw2 = new PrintWriter(new FileWriter("esame4-2.txt")); PrintWriter pw3 = new PrintWriter(new FileWriter("esame4-3.txt")); PrintWriter pw4 = new PrintWriter(new FileWriter("esame4-4.txt")); PrintWriter pw5a = new PrintWriter(new FileWriter("esame4-5a.txt")); PrintWriter pw5b = new PrintWriter(new FileWriter("esame4-5b.txt"))) { /* * Acquisizione input */ String linea = br.readLine(); String[] dati; String[] persone; String[] punteggi; ArrayList punteggiL; ArrayList personeL; while (linea != null) { dati = linea.split(";"); // dati[0] = persone, dati[1] = punteggi persone = dati[0].split(","); punteggi = dati[1].split(","); for (int i = 0; i < persone.length; i++) { punteggiL = new ArrayList<>(); personeL = new ArrayList<>(); if (personePunteggi.get(persone[i].trim()) == null) { // se la persona e' nuova punteggiL.add(Integer.parseInt(punteggi[i].trim())); personePunteggi.put(persone[i].trim(), punteggiL); } else { // se la persona e' gia' inserita nella mappa personePunteggi.get(persone[i].trim()).add(Integer.parseInt(punteggi[i].trim())); } if (punteggiPersone.get(Integer.parseInt(punteggi[i].trim())) == null) { // se il punteggio e' nuovo personeL.add(persone[i].trim()); punteggiPersone.put(Integer.parseInt(punteggi[i].trim()), personeL); } else { // se il punteggio e' gia' inserita nella mappa punteggiPersone.get(Integer.parseInt(punteggi[i].trim())).add(persone[i].trim()); } } linea = br.readLine(); } System.out.println(personePunteggi); System.out.println(punteggiPersone); /* * Elaborazione */ // punto 1 for (String p : personePunteggi.keySet()) { System.out.println(p + " -> " + personePunteggi.get(p).size()); pw1.println(p + " -> " + personePunteggi.get(p).size()); } // punto 2 int sum; int maxPun = 0; String maxPer = null; for (String per : personePunteggi.keySet()) { sum = 0; for (int pun : personePunteggi.get(per)) { sum += pun; } if (sum > maxPun) { // e se volessimo tutte le persone? maxPun = sum; maxPer = per; } } System.out.println(maxPer + " ha la somma dei punteggi piu' alta: " + maxPun); pw2.println(maxPer + " ha la somma dei punteggi piu' alta: " + maxPun); // punto 3 maxPun = 0; int maxKey = 0; for (Integer pun : punteggiPersone.keySet()) { if (punteggiPersone.get(pun).size() > maxPun) { // e se volessimo tutte le persone? maxPun = punteggiPersone.get(pun).size(); maxKey = pun; } } System.out.println("Il punteggio " + maxKey + " e' associato a " + maxPun + " persone: " + punteggiPersone.get(maxKey)); pw3.println("Il punteggio " + maxKey + " e' associato a " + maxPun + " persone: " + punteggiPersone.get(maxKey)); // punto 4 HashMap> sommaPunteggi = new HashMap<>(); ArrayList personeS; for (String per : personePunteggi.keySet()) { sum = 0; for (int pun : personePunteggi.get(per)) { sum += pun; } if (sommaPunteggi.get(sum) == null) { personeS = new ArrayList<>(); personeS.add(per); sommaPunteggi.put(sum, personeS); } else { sommaPunteggi.get(sum).add(per); } } System.out.println("Le persone con la stessa somma di punteggi sono:"); pw4.println("Le persone con la stessa somma di punteggi sono:"); for (Integer pun : sommaPunteggi.keySet()) { if (sommaPunteggi.get(pun).size() > 1) { System.out.println(pun + " : " + sommaPunteggi.get(pun)); pw4.println(pun + " : " + sommaPunteggi.get(pun)); } } // punto 5a ArrayList ordinate = new ArrayList<>(); ordinate.addAll(sommaPunteggi.keySet()); Collections.sort(ordinate); Collections.reverse(ordinate); System.out.println("Lista persone con somma punteggi ordinata:"); pw5a.println("Lista persone con somma punteggi ordinata:"); for (Integer key : ordinate) { System.out.println(sommaPunteggi.get(key) + " : " + key); pw5a.println(sommaPunteggi.get(key) + " : " + key); } // punto 5b int[] chiavi = new int[sommaPunteggi.size()]; String[][] valori = new String[sommaPunteggi.size()][]; int i = 0; int j; for (Integer key : sommaPunteggi.keySet()) { chiavi[i] = key; j = 0; valori[i] = new String[sommaPunteggi.get(key).size()]; for (String tizi : sommaPunteggi.get(key)) { valori[i][j] = tizi; j++; } i++; } boolean swap = true; int tempC; String[] tempV; while (swap) { swap = false; for (i = 0; i < chiavi.length - 1; i++) { if (chiavi[i] < chiavi[i + 1]) { // scambio chiavi tempC = chiavi[i]; chiavi[i] = chiavi[i + 1]; chiavi[i + 1] = tempC; // scambio valori tempV = valori[i]; valori[i] = valori[i + 1]; valori[i + 1] = tempV; swap = true; } } } System.out.println("Lista persone con somma punteggi ordinata:"); pw5b.println("Lista persone con somma punteggi ordinata:"); for (int k = 0; k < chiavi.length; k++) { for (String v : valori[k]) { System.out.print(v + " "); pw5b.print(v + " "); } System.out.println(": " + chiavi[k]); pw5b.println(": " + chiavi[k]); } } catch (FileNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }