package soluzione19062017; 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 Soluzione3TestoBMain { public static void main(String[] args) { try (BufferedReader br = new BufferedReader(new FileReader("src/soluzione19062017/B.txt")); PrintWriter pw1 = new PrintWriter(new FileWriter("src/soluzione19062017/SoluzioneB3-1.txt")); PrintWriter pw2 = new PrintWriter(new FileWriter("src/soluzione19062017/SoluzioneB3-2.txt")); PrintWriter pw3 = new PrintWriter(new FileWriter("src/soluzione19062017/SoluzioneB3-3.txt")); PrintWriter pw4 = new PrintWriter(new FileWriter("src/soluzione19062017/SoluzioneB3-4.txt")); PrintWriter pw5 = new PrintWriter(new FileWriter("src/soluzione19062017/SoluzioneB3-5.txt"))) { String line = br.readLine(); HashMap> attivita = new HashMap>(); while (line != null) { if (!line.isEmpty()) { String nome = line.split(":")[0].trim(); String[] attiv = line.split(":")[1].split(","); String tipo = attiv[0].trim(); String[] comp = attiv[1].split("/"); int[] completamento = new int[2]; for (int i = 0; i < comp.length; i++) { completamento[i] = Integer.parseInt(comp[i].trim()); } Soluzione3TestoBAttivita att = new Soluzione3TestoBAttivita(tipo, completamento); if (!attivita.containsKey(nome)) { attivita.put(nome, new ArrayList()); attivita.get(nome).add(att); } else { attivita.get(nome).add(att); } } line = br.readLine(); } //punto 1 pw1.println(" Persone e relative attività"); for (String s : attivita.keySet()) { ArrayList ripetuti = new ArrayList(); pw1.println(s); for (Soluzione3TestoBAttivita at : attivita.get(s)) { if (!ripetuti.contains(at.getTipo())) { pw1.print(" > " + at.getTipo()); ripetuti.add(at.getTipo()); pw1.println(); } } } System.out.println("---------------------------------"); //punto2 for (String s : attivita.keySet()) { //i nomi non sono dupicati ma le attivit� si perch� si considerano differenti pw2.println(s + ":"); for (Soluzione3TestoBAttivita at : attivita.get(s)) { pw2.println(" > " + at.getTipo() + " è completata al "); double a = at.getCompletamento()[0]; double b = at.getCompletamento()[1]; pw2.println(((a / b) * 100) + "%"); } pw2.println(); } //punto 3 int totali = 0; int comple = 0; pw3.print("Persone che hanno frequentato in media più del 50% delle loro attivitù"); pw3.println(); for (String s : attivita.keySet()) { for (Soluzione3TestoBAttivita at : attivita.get(s)) { totali = totali + at.getCompletamento()[1]; comple = comple + at.getCompletamento()[0]; } double percent = 1.0 * comple / totali; if (percent > 0.5) { pw3.println(" > " + s); } totali = 0; comple = 0; } //punto 4 for (String s : attivita.keySet()) { pw4.println(s); double maxs = 0; int ref = 0; for (int i = 0; i < attivita.get(s).size(); i++) { double f = 1.0 * attivita.get(s).get(i).getCompletamento()[0] / attivita.get(s).get(i).getCompletamento()[1];//uso questo for per tenere traccia dell'indice dell'attivit� per poi recuperla velocemente if (f > maxs) { maxs = f; ref = i; } } pw4.println(" attività più completata : " + attivita.get(s).get(ref).getTipo()); } //punto 5 ArrayList chiaviord = new ArrayList(); HashMap> percentuali = new HashMap>();//riempio hashmap for (String s : attivita.keySet()) { percentuali = new HashMap>();//riempio hashmap chiaviord = new ArrayList(); for (Soluzione3TestoBAttivita at : attivita.get(s)) { double g = 1.0 * at.getCompletamento()[0] / at.getCompletamento()[1]; if (!percentuali.containsKey(g)) { percentuali.put(g, new ArrayList()); percentuali.get(g).add(at); } else { percentuali.get(g).add(at); } } for (double d : percentuali.keySet()) { chiaviord.add(d); } Collections.sort(chiaviord); pw5.println(s); for (double d : chiaviord) { for (int i = 0; i < percentuali.get(d).size(); i++) { pw5.println(" > " + percentuali.get(d).get(i).getTipo() + " è completata al " + (d * 100) + "%"); } } } } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } }