|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Bannato
Iscritto dal: Mar 2004
Città: Roma
Messaggi: 2682
|
[JAVA] Perchè dà errore ogni volta che nomino FailureException?
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;
}
}
Andrea |
|
|
|
|
|
#2 | |
|
Senior Member
Iscritto dal: Mar 2007
Messaggi: 4683
|
Quote:
__________________
Firma eliminata e avatar cambiato. Troppa gente giudica il monaco dall'abito. |
|
|
|
|
|
|
#3 |
|
Bannato
Iscritto dal: Mar 2004
Città: Roma
Messaggi: 2682
|
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
|
|
|
|
|
|
#4 | |
|
Senior Member
Iscritto dal: Mar 2007
Messaggi: 4683
|
Quote:
__________________
Firma eliminata e avatar cambiato. Troppa gente giudica il monaco dall'abito. |
|
|
|
|
|
|
#5 |
|
Senior Member
Iscritto dal: Sep 2001
Città: de_legato
Messaggi: 792
|
se postassi il trace dell'errore non sarebbe male....
__________________
---------------------------------------------- File reality.sys corrupted, Reboot Universe? Y/N ---------------------------------------------- |
|
|
|
|
|
#6 | |
|
Senior Member
Iscritto dal: Nov 2005
Messaggi: 2781
|
Quote:
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... |
|
|
|
|
|
|
#7 | |
|
Bannato
Iscritto dal: Mar 2004
Città: Roma
Messaggi: 2682
|
Quote:
|
|
|
|
|
|
|
#8 | |
|
Senior Member
Iscritto dal: Oct 2007
Città: Padova
Messaggi: 4131
|
Quote:
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.
__________________
As long as you are basically literate in programming, you should be able to express any logical relationship you understand. If you don’t understand a logical relationship, you can use the attempt to program it as a means to learn about it. (Chris Crawford) |
|
|
|
|
|
|
#9 | |
|
Bannato
Iscritto dal: Mar 2004
Città: Roma
Messaggi: 2682
|
Quote:
Gazie a tutti |
|
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 13:26.




















