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.HashMap; public class Esame5 { public static void main(String[] args) { HashMap> amiciDi = new HashMap<>(); HashMap nAmiciDi = new HashMap<>(); try (BufferedReader br = new BufferedReader(new FileReader("src/preparazione_esame/esame5.txt")); PrintWriter pw1 = new PrintWriter(new FileWriter("esame5-1.txt")); PrintWriter pw2 = new PrintWriter(new FileWriter("esame5-2.txt")); PrintWriter pw3 = new PrintWriter(new FileWriter("esame5-3.txt")); PrintWriter pw4 = new PrintWriter(new FileWriter("esame5-4.txt")); PrintWriter pw5 = new PrintWriter(new FileWriter("esame5-5.txt"))) { /* * Acquisizione input */ String linea = br.readLine(); String[] dati; ArrayList amici; while (linea != null) { dati = linea.split("->"); if (dati.length == 1) { dati = linea.split("<-"); for (String p : dati[0].split(",")) { amici = new ArrayList<>(); if (amiciDi.get(dati[1].trim()) == null) { amici.add(p.trim()); amiciDi.put(dati[1], amici); nAmiciDi.put(dati[1].trim(), 1); } else { amiciDi.get(dati[1].trim()).add(p.trim()); nAmiciDi.put(dati[1].trim(), nAmiciDi.get(dati[1].trim()) + 1); } } } else { for (String p : dati[1].split(",")) { amici = new ArrayList<>(); if (amiciDi.get(dati[0].trim()) == null) { amici.add(p.trim()); amiciDi.put(dati[0], amici); nAmiciDi.put(dati[0].trim(), 1); } else { amiciDi.get(dati[0].trim()).add(p.trim()); nAmiciDi.put(dati[0].trim(), nAmiciDi.get(dati[0].trim()) + 1); } } } linea = br.readLine(); } System.out.println(amiciDi); System.out.println(nAmiciDi); /* * Elaborazione */ // punto 1 for (String p : amiciDi.keySet()) { System.out.println(p + " ha " + amiciDi.get(p).size() + " amici"); pw1.println(p + " ha " + amiciDi.get(p).size() + " amici"); } // punto 2 int sum; int max = -1; String maxP = null; for (String p : amiciDi.keySet()) { sum = 0; for (String a : amiciDi.get(p)) { if (a.startsWith("M")) { sum++; } } if (sum > max) { max = sum; maxP = p; } } if (maxP != null) { System.out.println(maxP + " ha piu' amici che iniziano per 'M': " + max); pw2.println(maxP + " ha piu' amici che iniziano per 'M': " + max); } else { System.out.println("Nessuno ha amici che iniziano per 'M'"); pw2.println("Nessuno ha amici che iniziano per 'M'"); } // punto 3 for (String p : amiciDi.keySet()) { for (String anotherP : amiciDi.keySet()) { if (!anotherP.equals(p)) { if (amiciDi.get(anotherP).size() == amiciDi.get(p).size() && (amiciDi.get(anotherP).containsAll(amiciDi.get(p)))) { System.out.println(p + " e " + anotherP + " hanno gli stessi amici: " + amiciDi.get(p)); pw3.println(p + " e " + anotherP + " hanno gli stessi amici: " + amiciDi.get(p)); } } } } // punto 4 String[] ordinate = nAmiciDi.keySet().toArray(new String[] {}); String temp; for (int i = 0; i < nAmiciDi.size() - 1; i++) { if (nAmiciDi.get(ordinate[i]) < nAmiciDi.get(ordinate[i + 1])) { temp = ordinate[i]; ordinate[i] = ordinate[i + 1]; ordinate[i + 1] = temp; } } System.out.println("Persone ordinate secondo il numero di amici (decrescente):"); pw4.println("Persone ordinate secondo il numero di amici (decrescente):"); for (String s : ordinate) { System.out.println(s); pw4.println(s); } // punto 5 ArrayList persone = new ArrayList<>(); for (String p : amiciDi.keySet()) { if (!persone.contains(p)) { persone.add(p); } for (String a : amiciDi.get(p)) { if (!persone.contains(a)) { persone.add(a); } } } System.out.println(persone); pw5.println(persone); int[][] matrice = new int[persone.size()][persone.size()]; int r = 0; int c; for (String p : persone) { c = 0; for (String anotherP : persone) { if (amiciDi.get(p) != null) { if (amiciDi.get(p).contains(anotherP)) { matrice[r][c] = 1; } else { matrice[r][c] = 0; // non serve in realta' } } c++; } r++; } for (int[] riga : matrice) { for (int 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(); } } }