PDA

Visualizza la versione completa : [java] ritorno da eccezione


citrus
31-01-2004, 19:16
ciao a tutti...
vorrei porvi un problema:
come si fa a rientrare da un eccezione in un punto specifico del codice?
se ad esempio faccio inserire un valore ad un utente, se questo è sbagliato non mi basta stampare un errore e proseguire ma vorrei dargli la possibilità di reinserirlo.
la cosa si potrebbe fare con un while ma in questo caso ho un programma con diversi input e vorrei gestire l'eccezione una sola volta rimandando l'esecuzione del codice al punto che specifico quando lancio l'eccezione (non so magari passando un parametro)
sarà poi nel ramo catch che rimanderò il codice al punto "di rientro" specificato dall'eccezione che lancio.
è possibile?
grazie
citrus

keratox
31-01-2004, 19:44
Azz, errore

citrus
31-01-2004, 20:27
??

tommisceddu
01-02-2004, 13:02
perchè non provare a mettere il try-catch all'interno del do-while?
cioè tipo:


do
{
flag = false;
try {}
catch(exception e)
{System.out.println (); flag=true}
}
while(flag==true)

citrus
01-02-2004, 14:57
mmmmh, potrebbe essere una soluzione!
però così dovrei ripetere la gestione della stessa eccezione più e più volte quando invece (se non è troppo incasinato) potrei farlo una volta sola.
mi spiego:
ho uno switch ed in ciascuno dei case potrebbe verificarsi la stessa eccezione!
con il metodo che tu giustamente mi proponi potrebbe anche funzionare però così dovrei gestire la stessa eccezione singolarmente in ogni case.
invece io vorrei gestirla un unica volta su tutto lo switch ed essere poi in grado di far tornare l'esecuzione al case che ha generato l'eccezione.
pensi sia possibile o sto solo vaneggiando?
grazie
citrus
:)

citrus
01-02-2004, 15:06
un altra cosa che non ho specificato è che non sono i "case" a generare le eccezioni ma dei metodi richiamati al loro interno.
e qui la cosa si complica perhè lo stesso metodo può essere richiamato in due case diversi.
quindi a me servirebbe proprio di memorizzare il punto in cui viene effettivamente "a galla" l'eccezione e riprendere da li dopo averla gestita.

Zero-2
01-02-2004, 15:26
Rientri sempre nello stesso case con la soluzione che ti è stata suggerita se la variabile che usi per lo switch non cambia valore.
Se cambia puoi salvarne il contenuto in una variabile temporanea per poi ricopiarcela .

citrus
01-02-2004, 18:08
scusa... temo di non aver capito...
quindi non posso gestire un unica eccezione su tutto lo switch anzichè su ogni singolo case?
in particolare non ho capito il discorso sulla varibile.
grazie ancora
citrus

Zero-2
01-02-2004, 18:47
SI che puoi gestire l'eccezzione sul tutto lo switch



boolean flag=true;
do{
try{
switch(a){
case .. metodo1();
case ...metodo2();
case ...metodo1();
....
....
}
}catch(Exception r){
if(gestibile)gestisci();
else
flag=false;}
}while(flag);



metodo1 supponiamo lanci un eccezione , tu la gestisci
e riprendi il ciclo dallo switch.
Se la variabile a , supponendo che conteneva la condizione che ti ha fatto entrare nel primo case , non cambia , tu rientrerai sempre nel primo case .

citrus
02-02-2004, 12:25
Originariamente inviato da Zero-2
SI che puoi gestire l'eccezzione sul tutto lo switch



boolean flag=true;
do{
try{
switch(a){
case .. metodo1();
case ...metodo2();
case ...metodo1();
....
....
}
}catch(Exception r){
if(gestibile)gestisci();
else
flag=false;}
}while(flag);



metodo1 supponiamo lanci un eccezione , tu la gestisci
e riprendi il ciclo dallo switch.
Se la variabile a , supponendo che conteneva la condizione che ti ha fatto entrare nel primo case , non cambia , tu rientrerai sempre nel primo case .

è vero, però dipende da dove valorizzo la varibile su cui poi si basa lo switch giusto?
perchè se questa sta fuori il "do" allora funziona come dici tu, solo che va all'infinito, nel senso che poi non si può più uscire dal case (perchè la variabile non può più essere modificata).
se invece la valorizzazione sta dentro allora non rientra più nel case che ha generato l'eccezione ma mi richiede di rivalorizzare la variabile.
dico bene? (ho provato e mi succede così!)

Loading