Ciao,
stò facendo un'esercitazione della professoressa...però tutte le volte che provo a sollevare una Failure Exception in questa classe mi dà errore in fase di compilazione...che sbaglio?
Altra domanda...a che serve la prima riga: import java.util.*;

codice:
import java.util.*;

public class ListaDiInteri{
	/** OVERIEW: Rappresenta e gestisce liste di interi, è l'implementazione del seguente tipo astratto:
		V = Z U {<x,n>: x € Z ed n € V} (Z è l'insieme degli interi relativi)
		O = Insieme degli operatori di lettura, inserimento e cancellazione
		C = Insieme Vuoto
		
		Gli oggetti di tipo ListaDiInteri sono MODIFICABILI */
		
	private NodoInt N;			// Variabile di istanza che rappresenta la testa della lista
	private int quantiNodi;		// Variabile di istanza che rappresenta il numero di nodi presenti nella lista
	
	private class ListaIteratore implements Iterator{		// Classe interna per il generatore
		
		private NodoInt questo;				// Riferimento al nodo corrente
		
		public ListaIteratore(){			// Costruttore
			questo = N;						// Il nuovo generatore inizialmente punta sempre alla testa della lista
		}
		
		public boolean hasNext(){
			return questo != null;
		}
		
		public Object next() throws NoSuchElementException{
			if(questo == null) throw new NoSuchElementException();	// Se il ricevente è l'ultimo nodo, ritorna l'eccezione
			
			return new Integer(questo.getValore());	 // Altrimenti incarta il valore in un Integer e restituiscine una copia
		}
		
		public void remove(){
			if(questo != null) questo = questo.getSuccessivo();	// Elimina l'element dall'iteratore ma non dalla collezione
		}
	
	}
	
	/** Metodo osservatore
		REQUIRES: La collezione non deve essere modificata mentre l'iteratore è in uso
		@return: Un iteratore degli elementi dell'oggetto ricevente */
		
	public Iterator elementi(){
		return new ListaIteratore();
	}
	
	/** EFFECTS: Crea una lista di interi vuota */
	
	public ListaDiInteri(){		// E' il costruttore della classe ListaDiInteri
		N = null;
		quantiNodi = 0;
	}
	
	/** EFFECTS: Aggiunge in testa alla lista un nuovo elemento il cui elemento è pari al parametro
		MODIFIES: this
		@param: k di tipo int, il valore da aggiungere in testa all'oggetto ricevente */
		
	public void aggiungiInTesta(int k){
		NodoInt Nuovo = new NodoInt(k);		// Crea un nuovo nodo con campo informativo pari a k
		Nuovo.setSuccessivo(N);				// Fai puntare il nuovo nodo alla lista N
		N = Nuovo;							// Aggiungi il nuovo nodo in testa;
		quantiNodi ++;							// Incrementa di 1 il numero dei nodi presenti nella lista
	}
	
	/** EFFECTS: Aggiunge in coda alla lista un nuovo nodo il cui valore intero è pari al parametro
		MODIFIES: this
		@param: k di tipo int, il valore da aggiungere in coda all'oggetto ricevente */
		
	public void aggiungiInCoda(int k){
		NodoInt x, nuovo;					// Dichiara due variabili di tipo NodoInt
		
		nuovo = new NodoInt(k);				// Crea un nuovo nodo con campo informativo pari a k
		
		if(N != null){						// Se la lista N non è vuota
			x = N;								// Metti in x il riferimento alla testa della lista
			while(x.getSuccessivo() != null){	// ITERA SULLA LISTA scorrendola fino all'ultimo nodo
				x = x.getSuccessivo();
			}
			x.setSuccessivo(nuovo);				// ed infine AGGIUNGI IN CODA il nuovo nodo
			quantiNodi ++;						// ed incrementa di 1 il numero di nodi presenti nella lista
		}
		
		else{
			aggiungiInTesta(k);				// Altrimenti (se la lista era vuota) aggiungi in testa il nuovo nodo
			quantiNodi ++;						// ed incrementa di 1 il numero di nodi presenti nella lista
		}
	}
	
	/** EFFECTS: Rimuove l'elemento in testa della lista oggetto ricevente ed espone l'oggetto ricevente a possibili
		effetti collaterali
		MODIFIES: this
		REQUIRES: L'oggetto ricevente deve essere diverso da null
		@return: Il riferimento all'oggetto di tipo NodoInt in testa alla lista (che viene rimosso dalla lista)
		@throws: FailureException (Unchecked) */
		
	public NodoInt rimuoviDaTesta(){
		NodoInt testa = N;			// Dichiara una variabile di tipo NodoInt e mettici dentro la testa della lista
		
		if(N == null) throw new FailureException();		// Se la lista N è vuota solleva la FailureException
		
		N = N.getSuccessivo();		// (altrimenti) metti in N il riferimento al secondo elemento della lista N stessa
		quantiNodi --;					// Descrementa di 1 il numero di nodi della lista
		return testa;				// Ritorna al chiamante il riferimento dell'oggetto in testa che è stato eliminato
	}
	
	
	/** EFFECTS: Rimuove l'elemento in coda della lista oggetto ricevente ed espone l'oggetto ricevente a possibili
		effetti collaterali
		MODIFIES: this
		REQUIRES: L'oggetto ricevente deve essere diverso da null
		@return: Il riferimento all'oggetto di tipo NodoInt in coda alla lista (che viene rimosso dalla lista)
		@throws: FailureException (Unchecked) */	
		
	public NodoInt rimuoviDaCoda(){
		NodoInt x, coda;			// Dichiara due variabili di tipo NodoInt
		
		if(N == null) throw new FailureException();		// Se la lista N è vuota solleva la FailureException
		
		x = N;					// Metti in X il riferimento alla testa della lista
		
		if(N.getSuccessivo() == null){		// Se la lista è formata da un solo nodo (la testa è anche la coda)
			coda = N;						// Metti dento coda il riferimento alla testa della lista
			N = null;						// Ed elimina la coda rendendo la lista vuota
		}
		
		else{			// Altrimenti scorri la lista fino al penultimo nodo
			while(x.getSuccessivo() != null && (x.getSuccessivo()).getSuccessivo() != null){
				x = x.getSuccessivo();		// Metti in x il riferimento al penultimo nodo della lista
			}
			coda = x.getSuccessivo();		// Metti in coda il riferimento all'ultimo nodo della lista
			x.setSuccessivo(null);			// Elimina l'ultimo nodo dalla lista
		}
		quantiNodi --;						// Decrementa di 1 il numero di nodi presenti nella lista
		return coda;						// Ritorna al chiamante il riferimento all'ultimo nodo eliminato dalla lista
	}
	
	/** Metodo osservatore
		REQUIRES: L'oggetto ricevente deve essere diverso da null
		@throws: FailureException (unchecked)
		@return: Il valore dell'elemento in testa alla lista oggetto ricevente */
	
	public int getTesta(){
		if(N == 0) throw new FailureException();
		return N.getValore();
	}
	
	/** Metodo osservatore
		REQUIRES: L'oggetto ricevente deve essere diverso da null
		@throws: FailureException (unchecked)
		@return: Il valore dell'elemento in coda alla lista oggetto ricevente */
		
	public int getCoda(){
		NodoInt x;				// Dichiaro una variabile x di tipo NodoInt
		
		if(N == 0) throw new FailureException();		// Se la lista N è vuota solleva una FailureException
		
		x = N;			// (altrimenti) metti in x il riferimento alla testa della lista
		
		if(N != null)
			while(x.getSuccessivo() != null)
				x = x.getSuccessivo();
			
		else getTesta();
		
		return x.getValore();
	}
	
	/** Metodo osservatore
		Verifica se la lista oggetto ricevente contiene l'intero specificato dal parametro
		@REQUIRES: L'oggetto ricevente deve essere diverso da null
		@param: i di tipo int, è il valore da cercare nella lista
		@return: true se l'oggetto ricevente contiene il parametro, false altrimenti
		@throws: FailureException (unchecked) */
		
	public boolean cerca(int i){
		NodoInt x;
		boolean trovato = false;
		
		if(N == null) throw new FailureException();
		x = N;
		while(x != null && x.getValore() != i)
			x = x.getSuccessivo();
			
		if(x != null) trovato = true;
		
		return trovato;
	}
	
	public String toString(){
		NodoInt x;
		String s= "";
		
		x = N;
		
		while(x != null){
			s += x.getValore();
			x = x.getSuccessivo();
		}
		
		return s;
	}
	
}
Grazie
Andrea