PDA

View Full Version : [JAVA] Perchè dà errore ogni volta che nomino FailureException?


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

~FullSyst3m~
13-05-2009, 19:51
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

Il codice non l'ho letto, ma posso rispondere alla prima domanda. Il .* dovrebbe significare che importi tutte le classi e tipi appartenenti a quel package in modo da averli nello scope e disponibili all'uso.

D4rkAng3l
13-05-2009, 19:55
Il codice non l'ho letto, ma posso rispondere alla prima domanda. Il .* dovrebbe significare che importi tutte le classi e tipi appartenenti a quel package in modo da averli nello scope e disponibili all'uso.

eh si quello lo sapevo...però vorrei sapere perchè li importo e a cosa mi servono...forse per implementare l'interface Iterator? è l'unica cosa che mi viene in mente

~FullSyst3m~
13-05-2009, 20:00
eh si quello lo sapevo...però vorrei sapere perchè li importo e a cosa mi servono...forse per implementare l'interface Iterator? è l'unica cosa che mi viene in mente

Forse li importi perchè usi classi o altri tipi che sono in quel package e ti servono. Comunque come ho detto non ho guardato il codice, sto andando a magnà :D, quindi vado ad intuito.

Frank1962
13-05-2009, 20:25
se postassi il trace dell'errore non sarebbe male....

wingman87
13-05-2009, 20:43
eh si quello lo sapevo...però vorrei sapere perchè li importo e a cosa mi servono...forse per implementare l'interface Iterator? è l'unica cosa che mi viene in mente
L'import serve a risparmiare un sacco di codice. Mi spiego meglio con un esempio: prendiamo Iterator, quando compili il tuo codice vuoi che ogni volta che il compilatore trovi Iterator si riferisca all'Iterator che si trova nel package java.util (guarda la documentazione java per accertartene: LINK (http://java.sun.com/javase/6/docs/api/java/util/Iterator.html)). A questo serve l'import.
Non è l'unica strada percorribile, infatti ogni volta invece di scrivere solo "Iterator" avresti potuto scrivere il suo "percorso" completo: "java.util.Iterator".
In sostanza è come quando in windows o in linux aggiungi dei percorsi alla variabile di ambiente PATH, dopo averli aggiunti puoi lanciare gli eseguibili ivi contenuti semplicemente digitandone il nome.
Sinceramente non so come vengano gestite eventuali collisioni...

Riguardo il problema della FailureException ho provato a cercare sulla documentazione ma non esiste un'eccezione con quel nome, non è che è un'eccezione definita dalla prof? Oppure per FailureException intendeva una qualsiasi eccezione che rappresenti un fallimento...

D4rkAng3l
14-05-2009, 00:41
L'import serve a risparmiare un sacco di codice. Mi spiego meglio con un esempio: prendiamo Iterator, quando compili il tuo codice vuoi che ogni volta che il compilatore trovi Iterator si riferisca all'Iterator che si trova nel package java.util (guarda la documentazione java per accertartene: LINK (http://java.sun.com/javase/6/docs/api/java/util/Iterator.html)). A questo serve l'import.
Non è l'unica strada percorribile, infatti ogni volta invece di scrivere solo "Iterator" avresti potuto scrivere il suo "percorso" completo: "java.util.Iterator".
In sostanza è come quando in windows o in linux aggiungi dei percorsi alla variabile di ambiente PATH, dopo averli aggiunti puoi lanciare gli eseguibili ivi contenuti semplicemente digitandone il nome.
Sinceramente non so come vengano gestite eventuali collisioni...

Riguardo il problema della FailureException ho provato a cercare sulla documentazione ma non esiste un'eccezione con quel nome, non è che è un'eccezione definita dalla prof? Oppure per FailureException intendeva una qualsiasi eccezione che rappresenti un fallimento...

Credo la seconda che hai detto...l'eccezione unchecked che si riferisce ad un qualsiasi generico fallimento...booo

banryu79
14-05-2009, 08:34
Credo la seconda che hai detto...l'eccezione unchecked che si riferisce ad un qualsiasi generico fallimento...booo
Che io sappia non esite nel JDK una classe FailureException.
Inoltre è stato specificato che deve essere una eccezione di tipo "unchecked".

Hai due possibilità:
1) L'eccezione è stata definita dalla professoressa, e la sua definizione deve essere da qualche parte: se non ti è stato consegnata, chiedigliela.

2) La professoressa vuole che la implementiate voi l'eccezione FailureException, e deve essere implementata come eccezione "uncheked".
Potresti implementarla nel sorgente come estensione della classe RuntimeException.

D4rkAng3l
14-05-2009, 10:08
Che io sappia non esite nel JDK una classe FailureException.
Inoltre è stato specificato che deve essere una eccezione di tipo "unchecked".

Hai due possibilità:
1) L'eccezione è stata definita dalla professoressa, e la sua definizione deve essere da qualche parte: se non ti è stato consegnata, chiedigliela.

2) La professoressa vuole che la implementiate voi l'eccezione FailureException, e deve essere implementata come eccezione "uncheked".
Potresti implementarla nel sorgente come estensione della classe RuntimeException.

Certo...potrei crearla io estendendo RunTimeException senza farmi troppi problemi...ma visto che la nomina dall'inizio del corso come se fosse una cosa normale...booo...forse è meglio che le chiedo anche qualche delucidazione in merito...bah...

Gazie a tutti