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 Soluzione1TestoBMain { public static void main(String[] args) { HashMap> personeattività = new HashMap<>(); ArrayList tanteattivita; try (BufferedReader br = new BufferedReader(new FileReader("src/soluzione19062017/B.txt")); PrintWriter pw1 = new PrintWriter(new FileWriter("src/soluzione19062017/SoluzioneB1-1.txt")); PrintWriter pw2 = new PrintWriter(new FileWriter("src/soluzione19062017/SoluzioneB1-2.txt")); PrintWriter pw3 = new PrintWriter(new FileWriter("src/soluzione19062017/SoluzioneB1-3.txt")); PrintWriter pw4 = new PrintWriter(new FileWriter("src/soluzione19062017/SoluzioneB1-4.txt")); PrintWriter pw5 = new PrintWriter(new FileWriter("src/soluzione19062017/SoluzioneB1-5.txt"))) { String linea = br.readLine(); String nome = ""; String attivita = ""; double completata = 0; double obiettivo = 0; String[] dati; String[] dati2; String[] dati3; while (linea != null) { if (!linea.isEmpty() && linea.contains(":")) { dati = linea.split(":"); System.out.println(dati[0]); nome = dati[0].trim(); dati2 = dati[1].split(","); System.out.println(dati2[0]); attivita = dati2[0].trim(); dati3 = dati2[1].split("/"); System.out.println(dati3[0] + " " + dati3[1]); completata = Double.parseDouble(dati3[0].trim()); obiettivo = Double.parseDouble(dati3[1].trim()); if (personeattività.get(nome) == null) { tanteattivita = new ArrayList<>(); tanteattivita.add(new Soluzione1TestoBAttivita(nome, attivita, completata, obiettivo)); personeattività.put(nome, tanteattivita); } else { personeattività.get(nome).add(new Soluzione1TestoBAttivita(nome, attivita, completata, obiettivo)); } } linea = br.readLine(); } System.out.println(personeattività); /* * Punto 1 (SM+6) OK */ ArrayList nomiattivita; for (String persona : personeattività.keySet()) { nomiattivita = new ArrayList<>(); for (Soluzione1TestoBAttivita att : personeattività.get(persona)) { if (!nomiattivita.contains(att.getAttivita())) { nomiattivita.add(att.getAttivita()); } } pw1.println("persona ->" + persona); for (String s : nomiattivita) { pw1.println(s); } pw1.println(); } /* * Punto 2 (SM+6) OK */ for (String persona : personeattività.keySet()) { pw2.println("persona -> " + persona); for (Soluzione1TestoBAttivita att : personeattività.get(persona)) { pw2.println(att.getAttivita() + " à stata completata al " + CalcolaPercentuale(att) + "%"); System.out.println(CalcolaPercentuale(att)); } pw2.println(); } /* * Punto 3 (SM+6) OK */ double media; double numattivita; for (String persona : personeattività.keySet()) { media = 0; numattivita = personeattività.get(persona).size(); for (Soluzione1TestoBAttivita att : personeattività.get(persona)) { media += CalcolaPercentuale(att); } media = media / numattivita; System.out.println("media" + media); if (media > 50) { pw3.println(persona + " ha una percentuale media di completamento delle attività superiore al 50% -> " + media); pw3.println(); } } /* * Punto 4 (SM+6) OK */ double percentualemax = 0; String attivitàmax = ""; double somma; HashMap> attivitapercentcompletamento = new HashMap<>(); ArrayList attivitapers = new ArrayList<>(); ArrayList valori = new ArrayList<>(); for (String persona : personeattività.keySet()) { percentualemax = 0; attivitapercentcompletamento = new HashMap<>(); attivitapers = new ArrayList<>(); for (Soluzione1TestoBAttivita att : personeattività.get(persona)) { if (!attivitapers.contains(att.getAttivita())) { attivitapers.add(att.getAttivita()); } } for (String s : attivitapers) { for (Soluzione1TestoBAttivita att : personeattività.get(persona)) { if (att.getAttivita().equals(s)) { if (attivitapercentcompletamento.get(s) == null) { valori = new ArrayList<>(); valori.add(CalcolaPercentuale(att)); attivitapercentcompletamento.put(s, valori); } else { attivitapercentcompletamento.get(s).add(CalcolaPercentuale(att)); } } } } System.out.println(attivitapercentcompletamento); for (String att : attivitapercentcompletamento.keySet()) { somma = 0; for (Double d : attivitapercentcompletamento.get(att)) { somma += d; } media = somma / attivitapercentcompletamento.get(att).size(); if (media > percentualemax) { percentualemax = media; attivitàmax = att; } } pw4.println("per " + persona + " l'attività " + attivitàmax + " ha percentuale maggiore " + percentualemax + "%"); pw4.println(); } /* * Punto 5 (SM+6) OK */ HashMap> percentualeattività = new HashMap<>(); ArrayList attivitàstessaperc; ArrayList percentuali; for (String persona : personeattività.keySet()) { percentualeattività = new HashMap<>(); for (Soluzione1TestoBAttivita att : personeattività.get(persona)) { if (percentualeattività.get(CalcolaPercentuale(att)) == null) { attivitàstessaperc = new ArrayList<>(); attivitàstessaperc.add(att.getAttivita()); percentualeattività.put(CalcolaPercentuale(att), attivitàstessaperc); } else { percentualeattività.get(CalcolaPercentuale(att)).add(att.getAttivita()); } } percentuali = new ArrayList<>(); System.out.println(percentualeattività); percentuali.addAll(percentualeattività.keySet()); Collections.sort(percentuali); pw5.println(persona + " attivita in base alla percentuale del completamento in ordine crescente"); for (Double key : percentuali) { pw5.println(percentualeattività.get(key) + " completata al -> " + key + "%"); } pw5.println(); } } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } public static double CalcolaPercentuale(Soluzione1TestoBAttivita attivita) { double percentuale; percentuale = attivita.getCompletata() * 100; percentuale = percentuale / attivita.getObiettivo(); return percentuale; } }