Fondamenti di Informatica 1 - canale 89 - a.a. 2007 - 2008 Prova di Programmazione - 14.12.2007 LISTA DI ELEMENTI CONFRONTABILI =============================== Una lista di elementi confrontabili e' definita dalle seguenti interfacce: public interface CList //--Lista di elementi confrontabili { int size(); CListIterator getIterator(); } public interface CListIterator // --Iteratore della Lista di elementi { boolean hasNext(); // confrontabili Object next(); void add(Comparable x); void remove(); } dove i metodi eseguono le seguenti operazioni: - size: restituisce il numero di elementi presenti nella lista - getIterator: restituisce un iteratore posizionato all'inizio della lista - hasNext: restituisce true se sono presenti nella lista elementi che seguono la posizione dell'iteratore, false altrimenti - next: restituisce il prossimo elemento che segue la posizione dell'iteratore; se non e' presente un prossimo elemento, genera l'eccezione java.util.NoSuchElementException - add: inserisce nella lista un elemento nella posizione successiva a quella dell'iteratore che viene posizionato dopo l'elemento inserito - remove: rimuove dalla lista l'elemento che e' stato restituito dal metodo next. Se viene invocato senza che prima sia stato invocato il metodo next genera l'eccezione java.lang.IllegalStateException. Il candidato scriva la parte privata e completi la parte pubblica della classe public class CLL implements CList { // parte privata ... public CLL() {...} } dove il costruttore inizializza una lista vuota. Codificare successivamente la seguente classe public class ExtendedCLL extends CLL { public Object get(int k) {...} public Object[] toSortedArray() {...} } dove i metodi eseguono le seguenti operazioni: - get(int k): restituisce l'elemento di rango k della lista, se questo e' presente, altrimenti genera l'eccezione java.util.NoSuchElementException - toSortedArray: restituisce un array nel quale gli elementi della lista sono ordinati in senso crescente secondo il loro ordine naturale. In sede di correzione il codice sara' provato con i comandi: $rm *.class $javac ProvaExtendedCLL.java $java ProvaExtendedCLL elementi.txt dove elementi.txt e' il file allegato e ProvaExtendedCLL e' la classe seguente: import java.util.Scanner; import java.io.*; public class ProvaExtendedCLL { public static void main(String[] args) throws IOException { Scanner in = new Scanner(new FileReader(args[0])); ExtendedCLL l = new ExtendedCLL(); CListIterator iter = l.getIterator(); while (in.hasNext()) iter.add(in.next()); in.close(); System.out.println("NUMERO DI ELEMENTI NELLA LISTA PIENA: " + l.size()); iter = l.getIterator(); System.out.println("***ELENCO DEGLI ELEMENTI DELLA LISTA***"); while (iter.hasNext()) System.out.println(iter.next()); System.out.println("***ELENCO DEGLI ELEMENTI DELLA LISTA PER RANGO***"); for (int i = 0; i < l.size(); i++) System.out.println(l.get(i)); System.out.println("***ELENCO DEGLI ELEMENTI ORDINATI DELLA LISTA***"); Object[] v = l.toSortedArray(); for (int i = 0; i < v.length; i++) System.out.println(v[i]); System.out.println("*** RIMOZIONE DEGLI ELEMENTI DELLA LISTA ***"); iter = l.getIterator(); while (iter.hasNext()) { iter.next(); iter.remove(); } System.out.println("NUMERO ELEMENTI NELLA LISTA VUOTA: " + l.size()); } } Nella realizzazione delle classi CLL e ExtendedCLL non e' lecito: - aggiungere elementi non privati. - usare classi della Java Platform API, ad eccezione di quelle del pacchetto java.lang e della classe java.util.NoSuchElementException. Alla fine della prova il candidato lascera' nella directory di lavoro i seguenti file: CLL.java, ExtendedCLL.java, ProvaExtendedCLL.java, List.java, ListIterator.java ed elementi.txt. I file CLL.java e ExtendedCLL.java dovranno contenere come prima riga un commento con nome e cognome del candidato, matricola, data, numero della postazione. ------------------------------------------------------------------------------- Cognome ______________________________ Nome _________________________________ Matricola _______________ Corso di Laurea _______________ Postazione __________ ------------------------------------------------------------------------------- Consegno l'elaborato che consiste dei seguenti file (contrassegnare con X): [] CLL.java [] ExtendedCLL.java Firma ________________________________ ------------------------------------------------------------------------------- Non consegno l'elaborato e mi ritiro dall'esame. Firma ________________________________ -------------------------------------------------------------------------------