D4rkAng3l
13-05-2009, 19:10
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.*;
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
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.*;
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