class Compilation { // Attributo costante: la durata max di un CD è 60 minuti public static final Tempo DURATA_MAX = new Tempo(60,0); // Attributi della classe private Brano[] brano; private int numeroBrani; private Tempo spazioRimasto; private String nome; private int codice; private int copie; // Costruttore della classe public Compilation(String nome, int copie) { // Impostazione attributi standard this.nome = nome; this.copie = copie; // Il codice non è noto al momento della creazione codice = 0; // Dividendo la durata max del CD per la durata min di un brano // si ottiene il numero max di brani registrabili su un CD int numeroMaxBrani = (DURATA_MAX.inSecondi() / Brano.DURATA_MIN.inSecondi()) + 1; brano = new Brano[numeroMaxBrani]; numeroBrani = 0; spazioRimasto = new Tempo(DURATA_MAX.minuti(), DURATA_MAX.secondi()); } // Metodi di interrogazione public String nome() { return nome; } public int codice() { return codice; } public int copie() { return copie; } // Metodi di impostazione public void impostaCodice(int c) { codice = c; } // Aggiunta di un brano public boolean aggiungi(Brano b) { if (b.durata().inSecondi() < spazioRimasto.inSecondi()) { brano[numeroBrani] = b; numeroBrani += 1; spazioRimasto.sottrai(b.durata()); return true; } else { return false; } } // Calcolo della durata totale public Tempo calcolaDurataTotale() { Tempo t = new Tempo(); for (int i = 0; i < numeroBrani; ++i) { t.somma(brano[i].durata()); } return t; } // Calcolo (approssimato) della durata media public Tempo calcolaDurataMedia() { Tempo t = new Tempo(); t = calcolaDurataTotale(); t.daSecondi(t.inSecondi() / numeroBrani); return t; } // Ricerca di un brano dato il titolo public Brano ricercaPerTitolo(String titolo) { for (int i = 0; i < numeroBrani; ++i) { if (titolo.equals(brano[i].titolo())) { return brano[i]; } } return null; } // Ricerca dei brani dato un autore public Brano[] ricercaPerAutore(String autore) { Brano[] stessoAutore = new Brano[numeroBrani]; int j = 0; for (int i = 0; i < numeroBrani; ++i) { if (autore.equals(brano[i].autore())) { stessoAutore[j++] = brano[i]; } } return stessoAutore; } }