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 Esame6 { public static void main(String[] args) { HashMap> mittentiMessaggi = new HashMap<>(); HashMap> destinatariMessaggi = new HashMap<>(); // utile per il punto 2 try (BufferedReader br = new BufferedReader(new FileReader("src/preparazione_esame/esame6.txt")); PrintWriter pw1 = new PrintWriter(new FileWriter("esame6-1.txt")); PrintWriter pw2 = new PrintWriter(new FileWriter("esame6-2.txt")); PrintWriter pw3 = new PrintWriter(new FileWriter("esame6-3.txt")); PrintWriter pw4 = new PrintWriter(new FileWriter("esame6-4.txt")); PrintWriter pw5 = new PrintWriter(new FileWriter("esame6-5.txt"))) { String linea = br.readLine(); String[] dati; String mittente; String destinatario; Messaggio m; ArrayList messaggi; while (linea != null) { if (linea.contains(">")) { // controllo come devo splittare dati = linea.split("->"); mittente = dati[0].trim(); // ragionate sugli array ottenuti con .split(" ") destinatario = dati[1].split(" ")[0].trim(); } else { dati = linea.split("<-"); mittente = dati[1].split(" ")[0].trim(); // ragionate sugli array ottenuti con .split(" ") destinatario = dati[0].trim(); } m = new Messaggio(mittente, destinatario, dati[1].split(" ")); // notate come ho implementato il costruttore if (mittentiMessaggi.get(mittente) == null) { messaggi = new ArrayList<>(); messaggi.add(m); mittentiMessaggi.put(mittente, messaggi); } else { mittentiMessaggi.get(mittente).add(m); } if (destinatariMessaggi.get(destinatario) == null) { messaggi = new ArrayList<>(); messaggi.add(m); destinatariMessaggi.put(destinatario, messaggi); } else { destinatariMessaggi.get(destinatario).add(m); } linea = br.readLine(); } for (String mitt : mittentiMessaggi.keySet()) { for (Messaggio mess : mittentiMessaggi.get(mitt)) { System.out.println(mess.asString()); } } // punto 1) ArrayList persone = new ArrayList<>(); for (String mit : mittentiMessaggi.keySet()) { for (Messaggio mes : mittentiMessaggi.get(mit)) { if (!persone.contains(mes.getMittente())) { persone.add(mes.getMittente()); } if (!persone.contains(mes.getDestinatario())) { persone.add(mes.getDestinatario()); } } } System.out.println("Le persone coinvolte sono:"); for (String s : persone) { System.out.println(s); pw1.println(s); } // punto 2) String maxDest = null; // per far star zitto il compilatore int maxMess = Integer.MIN_VALUE; int nMess; for (String dest : destinatariMessaggi.keySet()) { nMess = destinatariMessaggi.get(dest).size(); if (nMess > maxMess) { maxMess = nMess; maxDest = dest; } } System.out.println("La persona che ha ricevuto piu' messaggi e': " + maxDest + " (" + maxMess + ")"); pw2.println("La persona che ha ricevuto piu' messaggi e': " + maxDest + " (" + maxMess + ")"); // punto 3) HashMap nParoleMessaggi = new HashMap<>(); double nMessaggi = 0; for (String mit : mittentiMessaggi.keySet()) { for (Messaggio mes : mittentiMessaggi.get(mit)) { nMessaggi++; for (String parola : mes.getParoleMessaggio()) { // questi primi 3 for-each servono solo per scorrere tutte le parole for (String altroMit : mittentiMessaggi.keySet()) { // ora per ogni parola devo controllare in quanti messaggi di qualunque mittente compare (altri 2 for-each) for (Messaggio altroMes : mittentiMessaggi.get(altroMit)) { if (altroMes.getParoleMessaggio().contains(parola)) { // ATTENZIONE: ignorate il commento su maiuscole e minuscole e l'esempio di "oggi" if (nParoleMessaggi.get(parola) == null) { nParoleMessaggi.put(parola, 1); } else { nParoleMessaggi.put(parola, nParoleMessaggi.get(parola) + 1); } break; } } } } } } System.out.println("Le parole che compaiono in oltre il 30% dei messaggi sono:"); double p; for (String parola : nParoleMessaggi.keySet()) { p = nParoleMessaggi.get(parola) * 100 / nMessaggi; if (p > 30) { System.out.printf("%s : %.02f\n", parola, p); pw3.printf("%s : %.02f\n", parola, p); } } // punto 4) HashMap nMessaggiMittenti = new HashMap<>(); for (String mit : mittentiMessaggi.keySet()) { nMessaggiMittenti.put(mittentiMessaggi.get(mit).size(), mit); } ArrayList ordinati = new ArrayList<>(); ordinati.addAll(nMessaggiMittenti.keySet()); Collections.sort(ordinati); // ATTENZIONE: ve lo avrei scritto nel testo del compito Collections.reverse(ordinati); // ATTENZIONE: ve lo avrei scritto nel testo del compito System.out.println("Le persone ordinate dalla piu' mittente sono:"); for (Integer i : ordinati) { System.out.println(nMessaggiMittenti.get(i)); pw4.println(nMessaggiMittenti.get(i)); } // punto 5) HashMap nMessaggiA = null; HashMap nMessaggiDa = null; PrintWriter pw; for (String chi : mittentiMessaggi.keySet()) { nMessaggiA = new HashMap<>(); pw = new PrintWriter(new FileWriter(chi + ".txt")); for (Messaggio mes : mittentiMessaggi.get(chi)) { if (nMessaggiA.get(mes.getDestinatario()) == null) { nMessaggiA.put(mes.getDestinatario(), 1); } else { nMessaggiA.put(mes.getDestinatario(), nMessaggiA.get(mes.getDestinatario()) + 1); } } for (String a : nMessaggiA.keySet()) { System.out.println(chi + " ha inviato " + nMessaggiA.get(a) + " messaggi a " + a); pw.println(chi + " ha inviato " + nMessaggiA.get(a) + " messaggi a " + a); pw.flush(); // ATTENZIONE: questo non lo conoscete, ve lo avrei scritto nel testo del compito } if (destinatariMessaggi.keySet().contains(chi)) { nMessaggiDa = new HashMap<>(); for (Messaggio mes : destinatariMessaggi.get(chi)) { if (nMessaggiDa.get(mes.getMittente()) == null) { nMessaggiDa.put(mes.getMittente(), 1); } else { nMessaggiDa.put(mes.getMittente(), nMessaggiDa.get(mes.getMittente()) + 1); } } for (String da : nMessaggiDa.keySet()) { System.out.println(chi + " ha ricevuto " + nMessaggiDa.get(da) + " messaggi da " + da); pw.println(chi + " ha ricevuto " + nMessaggiDa.get(da) + " messaggi da " + da); pw.flush(); // ATTENZIONE: questo non lo conoscete, ve lo avrei scritto nel testo del compito } } } for (String chi : destinatariMessaggi.keySet()) { if (!nMessaggiA.keySet().contains(chi) && !nMessaggiDa.keySet().contains(chi)) { pw = new PrintWriter(new FileWriter(chi + ".txt")); nMessaggiDa = new HashMap<>(); for (Messaggio mes : destinatariMessaggi.get(chi)) { if (nMessaggiDa.get(mes.getMittente()) == null) { nMessaggiDa.put(mes.getMittente(), 1); } else { nMessaggiDa.put(mes.getMittente(), nMessaggiDa.get(mes.getMittente()) + 1); } } for (String da : nMessaggiDa.keySet()) { System.out.println(chi + " ha ricevuto " + nMessaggiDa.get(da) + " messaggi da " + da); pw.println(chi + " ha ricevuto " + nMessaggiDa.get(da) + " messaggi da " + da); pw.flush(); // ATTENZIONE: questo non lo conoscete, ve lo avrei scritto nel testo del compito } } } } catch (FileNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }