package soluzione10072017; 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) { // TODO Auto-generated method stub try (BufferedReader br = new BufferedReader(new FileReader("src/appello10072017/B.txt")); PrintWriter pw1 = new PrintWriter(new FileWriter("src/appello10072017/SoluzioneB1-1.txt")); PrintWriter pw2 = new PrintWriter(new FileWriter("src/appello10072017/SoluzioneB1-2.txt")); PrintWriter pw3 = new PrintWriter(new FileWriter("src/appello10072017/SoluzioneB1-3.txt")); PrintWriter pw4 = new PrintWriter(new FileWriter("src/appello10072017/SoluzioneB1-4.txt")); PrintWriter pw5 = new PrintWriter(new FileWriter("src/appello10072017/SoluzioneB1-5.txt"))) { HashMap> mappa = new HashMap<>(); ArrayList id; String[] dati; String[] dati2; String nome = null; String indice; String[] per; double percentuale; double punteggio; double punteggioMax; Soluzione1TestoBIndice indiceR = null; String line = br.readLine(); while (line != null) { if (!line.isEmpty()) { if (line.contains("Persona")) { dati = line.trim().split(":"); nome = dati[1].trim(); //System.out.println(nome); } if (line.contains("Indice")) { dati = line.trim().split(":"); dati2 = dati[1].trim().split(","); indice = dati2[0].trim(); per = dati2[1].split("/"); punteggio = Double.parseDouble(per[0]); punteggioMax = Double.parseDouble(per[1]); percentuale = punteggio * 100 / punteggioMax; indiceR = new Soluzione1TestoBIndice(indice, percentuale); if (mappa.get(nome) == null) { id = new ArrayList<>(); id.add(indiceR); mappa.put(nome, id); } else { mappa.get(nome).add(indiceR); } } } line = br.readLine(); } //1 per ogni persona stampare i suoi indici di rischio System.out.println("PUNTO 1:"); pw1.println("PUNTO 1:"); ArrayList ind; for (String s : mappa.keySet()) { ind = new ArrayList<>(); for (Soluzione1TestoBIndice r : mappa.get(s)) { ind.add(r.getIndice()); } System.out.println("Per " + s + " gli indici di rischio sono: " + ind); pw1.println("Per " + s + " gli indici di rischio sono: " + ind); } //2 per ogni persona stampare il valore percentuale dei suoi indici di rischio HashMap indiceper; System.out.println(); System.out.println("PUNTO 2:"); pw2.println("PUNTO 2:"); for (String s : mappa.keySet()) { indiceper = new HashMap<>(); for (Soluzione1TestoBIndice i : mappa.get(s)) { indiceper.put(i.getIndice(), i.getPercentuale()); } System.out.println("Per " + s + " le percentuali degli indici di rischio sono: " + indiceper); pw2.println("Per " + s + " le percentuali degli indici di rischio sono: " + indiceper); } //3 per ogni persona stampare il rischio medio in percentuale System.out.println(); System.out.println("PUNTO 3:"); pw3.println("PUNTO 3:"); int nIndici; Double sumInd; Double media; for (String s : mappa.keySet()) { nIndici = 0; sumInd = Double.MIN_VALUE; for (Soluzione1TestoBIndice i : mappa.get(s)) { nIndici++; sumInd += i.getPercentuale(); } //System.out.println(sumInd); media = sumInd / nIndici; System.out.println("Il rischio medio in percentuale di " + s + " è: " + media); pw3.println("Il rischio medio in percentuale di " + s + " è: " + media); } //4 per ogni persona stampare l'elenco degli indici di rischio in ordine decrescente System.out.println(); System.out.println("PUNTO 4:"); pw4.println("PUNTO 4:"); HashMap> perInd; ArrayList percentuali; ArrayList list; for (String s : mappa.keySet()) { System.out.println("Per " + s + " l'elenco degli indici di rischio in ordine decrescente è:"); pw4.println("Per " + s + " l'elenco degli indici di rischio in ordine decrescente è:"); perInd = new HashMap<>(); percentuali = new ArrayList<>(); for (Soluzione1TestoBIndice i : mappa.get(s)) { if (perInd.get(i.getPercentuale()) == null) { list = new ArrayList<>(); list.add(i.getIndice()); perInd.put(i.getPercentuale(), list); } else { perInd.get(i.getPercentuale()).add(i.getIndice()); } for (Double n : perInd.keySet()) { if (!percentuali.contains(n)) { percentuali.add(n); } } } //System.out.println(percentuali); Collections.sort(percentuali); Collections.reverse(percentuali); for (Double d : percentuali) { System.out.println(perInd.get(d)); pw4.println(perInd.get(d)); } } //5 stampare una matrice che per ogni persona e ogni indice mostri il rischio System.out.println(); System.out.println("PUNTO 5:"); pw5.println("PUNTO 5:"); double[][] matrice; int i = 0; int j; ArrayList persone = new ArrayList<>(); ArrayList in = new ArrayList<>(); for (String s : mappa.keySet()) { persone.add(s); for (Soluzione1TestoBIndice ir : mappa.get(s)) { if (!in.contains(ir.getIndice())) { in.add(ir.getIndice()); } } } //System.out.println(persone); System.out.println(in); matrice = new double[persone.size()][in.size()]; for (String s : mappa.keySet()) { j = 0; for (String indi : in) { for (Soluzione1TestoBIndice iR : mappa.get(s)) { if (iR.getIndice().equals(indi)) { matrice[i][j] = iR.getPercentuale(); } } j++; } i++; } for (double[] riga : matrice) { for (double cella : riga) { System.out.print(cella + " "); pw5.print(cella + " "); } System.out.println(); pw5.println(); } } catch (FileNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }