import java.util.*; public class SongManager{ private static class Brano implements Comparable { public double adeguatezza; //adeguatezza del brano per l'utente public String nome; //nome del brano public int numAscolti; //numero di volte che il brano è stato ascoltato /** * Costruttore con 3 argomenti * * @param a adeguatezza * @param n nome * @param na numero ascolti */ public Brano(String n, double a, int na){ adeguatezza = a; nome = n; numAscolti = na; } public String toString(){ return "<"+nome+", "+adeguatezza+", "+numAscolti+">"; } /** *Implementa il metodo compareTo per oggetti di tipo brano. (Punti 25) * Un brano b1 e' minore del brano b2 se l'adeguatezza del brano b1 e' minore dell'adeguatezza del brano b2. Altrimenti b1 e' maggiore di b2. * Se i brani b1 e b2 hanno lo stesso valore di adeguatezza, il brano b1 e' minore (o maggiore) del brano b2 se il numero di ascolti di b1 e' minore (o maggiore) del numero di ascolti di b2. * Se i brani b1 e b2 hanno stesso valore di adeguatezza e stesso numero di ascolti, il brano b1 e' minore (o maggiore) del brano b2 se il nome di b1 precede (o segue) il nome di b2 secondo l'ordine lessicografico. * @param b brano con cui comparare l'oggetto di invocazione * @return un intero negativo/positivo/nullo se l'oggetto di invocazione e' minore/maggiore/uguale al parametro. */ public int compareTo(Brano b){ System.out.println("Metodo da implementare"); return -1; } public boolean equals(Object obj) { if (obj instanceof Brano) { Brano b = (Brano) obj; return ((adeguatezza==b.adeguatezza) && (numAscolti == b.numAscolti) && (nome.equals(b.nome))); } return false; } } /** * Data un insieme di brani, ritornare una mappa che associa a ciascun numero di ascolti il nome del brano che ha adeguatezza più alta tra quelli che hanno lo stesso numero di ascolti. * Ad esempio se b = {("ants marching",15.0,3), ("Hanging around",25.5,7), ("ramblin' man",21.3,8),("two steps",14.5,3), ("shadow stabbing",28,7)} la mappa da restituire sara' {3="ants marching", 7="shadow stabbing", 8="ramblin' man"}. * Se l'insieme e' vuoto il metodo deve ritornare una mappa vuota. * * @param s insieme di voli * @return mappa che associa a ciascuna destinazione presente nella mappa il costo minore tra i voli per quella destinazione. */ public static Map bestSong(Set b){ System.out.println("Metodo da implementare"); return null; } public static void main(String[] args){ Brano b1 = new Brano("ants marching",15.0,3); Brano b2 = new Brano("hanging around",25.5,7); Brano b3 = new Brano("ramblin' man",21.3,8); Brano b4 = new Brano("two steps",14.5,3); Brano b5 = new Brano("shadow stabbing",28,7); Brano b6 = new Brano("mr Jones",25.5,6); Brano b7 = new Brano("typical situations",25.5,6); System.out.println("**********TEST compareTo()*************"); System.out.println("Brano "+b1+" comparato con "+b2+" "+b1.compareTo(b2)+" [dovrebbe essere negativo]"); System.out.println("Brano "+b2+" comparato con "+b6+" "+b2.compareTo(b6)+" [dovrebbe essere positivo]"); System.out.println("Brano "+b6+" comparato con "+b7+" "+b6.compareTo(b7)+" [dovrebbe essere negativo]"); System.out.println("Brano "+b3+" comparato con "+b3+" "+b3.compareTo(b3)+" [dovrebbe essere nullo]"); System.out.println("**********TEST hashCode()*************"); HashMap songDate = new HashMap(); songDate.put(b1,"1995"); songDate.put(b3,"1973"); System.out.println(songDate); System.out.println("Data per il brano b3 "+songDate.get(b3)); System.out.println("Data per il brano "+songDate.get(new Brano("ramblin' man",21.3,8))); System.out.println("Insieme chiavi contiene ? "+songDate.keySet().contains(new Brano("ramblin' man",21.3,8))); System.out.println("Hash Code per " + b3 + " (b3): " + b3.hashCode() +"\n Hash Code per : " +new Brano("ramblin' man",21.3,8).hashCode()); System.out.println("**********TEST bestSong()*************"); Set s = new HashSet(); s.add(b1); s.add(b2); s.add(b3); s.add(b4); s.add(b5); Map resMap = bestSong(s); System.out.println("Insieme di brani : " + s + "\n Brano con maggior numero di ascolti per lo stesso valore di adeguatezza : "+resMap+ " dovrebbe essere {3=(ants marching,15.0,3), 7=(shadow stabbing,28,7), 8=(ramblin' man,21.3,8)}"); Set empty = new HashSet(); Map resMap1 = bestSong(empty); System.out.println("Insieme di brani : " + empty + "\n Brano con maggior numero di ascolti per lo stesso valore di adeguatezza : "+resMap1+ " dovrebbe essere {}"); } }