//******************************************************************** // SortedCDCollection.java Author: Lewis and Loftus // // Classe per generare una collezione di CD. // Usata nella soluzione al progetto di programmazione 6.9 //******************************************************************** import SortableCD; // la classe per generare CD singoli import Sorts; // la classe generale per ordinare oggetti import java.text.NumberFormat; public class SortedCDCollection { private SortableCD[] collection; private int count; private double totalValue; private int currentSize; //----------------------------------------------------------------- // Crea una collezione inizialmente vuota. //----------------------------------------------------------------- public SortedCDCollection () { currentSize = 100; collection = new SortableCD[currentSize]; count = 0; totalValue = 0.0; } //----------------------------------------------------------------- // Aggiunge un CD alla collezione, aumenta la dimensione // dell'array che contiene la collezione, se è necessario. //----------------------------------------------------------------- public void addCD (String title, String artist, double value, int tracks) { if (count == currentSize) increaseSize(); collection[count] = new SortableCD(title, artist, value, tracks); count++; totalValue += value; } //----------------------------------------------------------------- // Riporta la descrizione della collezione per la stampa. // Prima la ordina. //----------------------------------------------------------------- public String toString() { sortCDs (); NumberFormat fmt = NumberFormat.getCurrencyInstance(); String report = "&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&\n"; report += "My CD Collection\n\n"; report += "Number of CDs: " + count + "\n"; report += "Total value: " + fmt.format(totalValue) + "\n"; report += "Average cost: " + fmt.format(totalValue/count); report += "\n\nCD List:\n\n"; for (int cd = 0; cd < count; cd++) report += collection[cd].toString() + "\n"; return report; } //----------------------------------------------------------------- // Raddoppia la dimensione della collezione. Crea un nuovo array // di diemnsione doppia e poi ricopia il vecchio nelle prime posizioni. //----------------------------------------------------------------- private void increaseSize () { currentSize *= 2; SortableCD[] temp = new SortableCD[currentSize]; for (int cd = 0; cd < collection.length; cd++) temp[cd] = collection[cd]; collection = temp; } //----------------------------------------------------------------- // Copia l'array SortableCD in un array temporaneo della stessa // dimensione, ne ordina gli elementi, poi li ricopia. //----------------------------------------------------------------- private void sortCDs() { SortableCD[] temp = new SortableCD[count]; for (int copy = 0; copy < count; copy++) temp [copy] = collection [copy]; Sorts.insertionSort (temp); for (int copy = 0; copy < count; copy++) collection[copy] = temp[copy]; } }