Newsgroup: it.comp.java
Titolo: Consiglio 'For' e gestione delle Eccezioni.

Buongiorno a tutti,
gradirei un Vs. parere e sono anche molto apprezzati consigli per
migliorare l'implementazione del seguente codice:
---------------------------------------------------------------------
public void addpippo(pluto) {
    boolean flagInsert = false;
    try {
	for (int i = 0; i < lista1.size(); i++) {
	     if (lista1.get(i).equals() {
		 (lista2(i).add = pluto);
		  flagInsert = true;
		  break;
	     }
	}
        if (!flagInsert)
	    throw new IllegalAccessException("Attenzione Errore 1!");
	} catch (IllegalArgumentException exception) {
                 // Errrore che potrebbe tornare il Metodo add 
		 System.out.println(exception.getMessage());
	} catch (IllegalAccessException exception) {
		 System.out.println(exception.getMessage());
	}
}
----------------------------------------------------------------------
I miei dubbi sono:
1) Devo uscire dal for solo se la condizione if e' Vera oppure se sono
   arrivato alla fine e quindi esco con un 'Break'.
   Non ci sarebbe un modo + elegante ?
2) L'utilizzo del FlagInsert vi sembra adatto per la programmazione in
   Java oppure si possono usare altri meccanismi ?
3) E' sensato gestire in un try 2 catch, di cui un'eccezione potrebbe
   essere lanciata  da un Metodo (add) chiamato e l'altra la lancio io
   se il FlagInsert e' false e quindi non sono riuscita ad inserire
   l'elemento?
Saluti Grazie a tutti per l'attenzione.
Lucilla
-- 
Posted via Mailgate.ORG Server - 
http://www.Mailgate.ORG

Ciao,
   sei sicura che il tuo codice sia corretto?
- l'i-esimo elemento della lista2 ha un campo pubblico che si chiama 
add? Te lo chiedo perché nel commento del primo chatch dichiari add 
essere un metodo.
- gli oggetti lista1 e lista2 immagino siano dei vettori/liste/array o 
cose del genere. Il test boolean dello statement IF è errato perché 1) 
manca una parentesi e 2) l'oggetto ritornato da get(i) a cosa dovrebbe 
essere uguale?
- per non usare il break potresti mettere il test sulla variabile 
flagInser nel test boolean del FOR (int i=0; i<lista1.size() && 
flagInser; i++)
XFobico


Si, hai ragione potrebbe esserci qualche errore sintattico, ma ho 
estrapolato il codice e ho cambiato dei nomi velocemente perche'
cio' che mi interessava chiedere erano i concetti espressi dai punti
1) 2) e 3).
Si, la Lista e' un'ArrayList.
Ciao e grazie mille.
Lucilla.


    l'elemento?
      Si' e' lecito, ma se poi le eccezioni le gestisci nello stesso modo
      (come nel codice che hai postato), che senso ha farlo?
Ciao!
Roberto

 
Sì

Nella fretta ho scritto || anzichè &&

Grazie a tutti per le risposte e scusate per gli errori sintattici...,
avevo fretta!!!
La prossima volta cerchero' di essere decisamente piu' corretta!!
Grazie, ancora e spero prima o poi a buon rendere.
Lucilla.


---> Al punto 2) mi ha consigliato:
     Potevi lanciare il throw direttamente nella if.
Scusa ma gradirei un chiarimento...in questa considerazione ti riferisci
alla If
alla IF all'interno del for oppure a quella che testa il Flag Insert ???
Ciao e grazie.
Lucilla.
----------------------------------------------------------------------
 public void addpippo(pluto) {
     boolean flagInsert = false;
     try {
 	for (int i = 0; i < lista1.size(); i++) {
 	     if (lista1.get(i).equals() {
 Qui non si capisce che testi
 
 		 (lista2(i).add = pluto);
 Qui non si capisce chi č lista2 nč che vuoi fare. Inoltre hai detto
 tu che add č un metodo, quindi anche la sintassi č sbagliata
 
 		  flagInsert = true;
 		  break;
 	     }
 	}
         if (!flagInsert)
 	    throw new IllegalAccessException("Attenzione Errore 1!");
 	} catch (IllegalArgumentException exception) {
                  // Errrore che potrebbe tornare il Metodo add
 		 System.out.println(exception.getMessage());
 	} catch (IllegalAccessException exception) {
 		 System.out.println(exception.getMessage());
 	}
 }
 ----------------------------------------------------------------------
 I miei dubbi sono:
 1) Devo uscire dal for solo se la condizione if e' Vera oppure se sono
    arrivato alla fine e quindi esco con un 'Break'.
    Non ci sarebbe un modo + elegante ?
 
    Certo: for (int i = 0; i < lista1.size() || flagInsert; i++)
 
 2) L'utilizzo del FlagInsert vi sembra adatto per la programmazione in
    Java oppure si possono usare altri meccanismi ?
 
 Potevi lanciare il throw direttamente nella if.
 
 3) E' sensato gestire in un try 2 catch, di cui un'eccezione potrebbe
    essere lanciata  da un Metodo (add) chiamato e l'altra la lancio io
    se il FlagInsert e' false e quindi non sono riuscita ad inserire
    l'elemento?
 Sě


 writes:
LM> Buongiorno a tutti,
LM> gradirei un Vs. parere e sono anche molto apprezzati consigli per
LM> migliorare l'implementazione del seguente codice:
        if (!flagInsert)
	    throw new IllegalAccessException("Attenzione Errore 1!");
	} catch (IllegalArgumentException exception) {
                 // Errrore che potrebbe tornare il Metodo add 
		 System.out.println(exception.getMessage());
	} catch (IllegalAccessException exception) {
		 System.out.println(exception.getMessage());
	}
Questo, come ti hanno detto con altre parole, è un pezzo di codice bruttino.
E' bruttino come stile e come velocità di esecuzione.
Le eccezioni sono nate  per segnalare qualcosa (di brutto) all'esterno
di un certo  metodo, delegando al richiamante la  gestione della gatta
da pelare. Usate all'interno del metodo funziona, ma stilisticamente è
bruttino.
Inoltre se esegui nel corpo della if() le istruzioni che avresti messo
nel  catch(IllegalAccessException) hai delle  prestazioni notevolmente
più.
Nell'Horstmann &  Cornell danno una  quantificazione del rallentamento
in circa 18 volte.
Ovvero, se puoi evitare con una if() di lanciare una eccezione, fallo.
-- 
 /\            ___
/___/\__|_|\_|__|___Gian Uberto Lauri_____________________
  //--\ | | \|  |   Integralista GNUslamico  
\/		    e allevatore di bug da competizione