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.*;
Graziecodice: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; } }
Andrea

Rispondi quotando
).
