Newsgroup: it.comp.java
Titolo: Domanda (quasi) base su ciclo for

E' possibile dichiarare più di una variabile all'interno di un ciclo for?
Cioè qualcosa del tipo:
for ( {ClasseA a; ClasseB b; int i=0}; i<10; i++)...
?
Grazie in anticipo, Bye, Animanera. :)
--
Per le mie ricerche uso SOSPlanet.it
http://www.sosplanet.it
Il motore di ricerca dei motori di ricerca

 E' possibile dichiarare più di una variabile all'interno di un ciclo for?
Sì che si può
Dai un'occhiata qui:
http://www.mokabyte.it/2002/09/javabase-6.htm
Ciao
--------------------------------
Inviato via 
http://usenet.libero.it

 
http://www.mokabyte.it/2002/09/javabase-6.htm
Grazie per la risposta...purtroppo, però non è quello che serve a me.
Infatti la mia necessità è di inizializzare più variabili di TIPO DIVERSO.
Cioè, come dicevo, qualcosa del tipo:
   for ( {ClasseA a; ClasseB b; int i=0}; i<10; i++)...
L'articolo specifica, invece, solo come inizializzare variabili dello STESSO
TIPO. Cioè qualcosa del genere:
for ( ClasseA a, b ; ; )...
Grazie, Bye, Animanera. :)

 for ( ClasseA a, b ; ; )...
ti danno fastidio le parentesi?
non vedo differenze strutturali oltre alle parentesi...
a cosa e dove ti servono queste variabili?
ciao

 a cosa e dove ti servono queste variabili?
La differenza è nel fatto che, nel primo caso, "a" e "b" sono di due tipi
diversi (ClasseA e ClasseB), mentre nel secondo caso, sono della stessa
classe (ClasseA)!!!
Magari non si capisce bene scritto così, cerco di scriverlo in un altro
modo:
1° caso: for ( { int i; double j; } ; ; )
2° caso: for ( int i, j; ; )
A me interessa il 1° caso e se eseguo il codice così come è scritto, mi
genera errore. Naturalmente, non posso separarli da una virgola (al posto
del punto-e-virgola), altrimenti pensa che "double" un altra variabili di
tipo int (altro errore), ma non posso (naturalmente) neanche eliminare le
parentesi, altrimenti considera il 2° assegnamento come il test del ciclo
for (altro errore).
Esiste una soluzione (che eviti la dichiarazione esterna)?
Grazie, Bye, Animanera. :)

> Esiste una soluzione (che eviti la dichiarazione esterna)?
Perchè non dichiarare le variabili all'interno del for?
--
Antonio Pelleriti.
Brainbench Java Master: score 4.34,
higher than 99% of all previous test takers.

 Perchè non dichiarare le variabili all'interno del for?
Perche' ad ogni iterata si dichiara una variabile locale che
esce dallo scope non appena inizia la prossima iterata ^_^
 
-- 
"Il soggetto va prima del pregiudicato, poi la congiuntivite
 e dopo la condizionale" - Francesco Totti

> > Esiste una soluzione (che eviti la dichiarazione esterna)?
Posto il codice reale, che spiega il perchè:
Dovrei esaminare tutti gli elementi di una lista, con un ListIterator.
Attualmente il codice opera in questo modo:
String item;
for (ListIterator i=lista.listIterator(); i.hasNext(); item=(String)
i.next()) {
...
}
In particolare, la terza espressione incrementa l'iteratore e, allo stesso
tempo, assegna l'elemento considerato ad "item", variabile che verrà
utilizzata all'interno del ciclo per dei test.
Il mio scopo era di eliminare quella scomoda assegnazione esterna, anche
perchè ne eseguo diversi di questi test, su liste diverse che contengono
oggetti di tipo diverso, e quindi non posso riutilizzare lo stesso nome di
variabile (item) se devo dichiararla di tipo diverso.
Ma, a dir la verità, il motivo principale è che, così strutturato, mi sembra
qualcosa di "non pulito".
Potrei risolvere eliminando la terza espressione per inserirla all'interno,
ma uscirebbe qualcosa del genere:
for (ListIterator i=lista.listIterator(); i.hasNext(); ) {
String item=(String) i.next();
..
}
il che funzionerebbe perfettamente, ma, allo stesso modo, sembrerebbe "non
pulito" (a questo punto, visto che non è uyn for vero e proprio, uso il
while!).
Il mio scopo era usare un "for" perchè logicamente più giusto per in
Iterator.
Ad ogni modo, come si può notare, la discussione è puramente filosofica,
visto che il codice iniziale funziona senza grossi problemi.
Grazie, Bye, Animanera. :)

 
La prima parte di uno statement for serve per dichiarare e/o inizializzare
le variabili di controllo del ciclo. Nel tuo caso e' la dichiarazione a
darti problemi, dal momento che deve essere di un solo tipo, dato che in
una dichiarazione la virgola serve per separare i vari identificatori.
Nel caso di solo inizializzazioni, invece tutto funziona, dal momento che
l'operatore "," semplicemente accoda le varie espressioni.
Quindi, qualcosa del genere e' perfettamente valido:
int i;
double j;
for(i=0, j=10.0; i<50; i++, j/2) {.....}
Se il problema e' solo lo scope delle variabili che utilizzi all'interno
del ciclo, per poterle ridichiarare (magari di un tipo diverso) in
un'altra porzione di codice, e' sufficiente racchiudere il tutto in un
blocco:
{
  int i;
  double j;
  for(i=0, j=10.0; i<50; i++, j/2) {.....}
}
-- 
Lucio Benfante
Brainbench MVP for Java 1
http://www.brainbench.com
MyTranscript: 
http://www.brainbench.com/transcript.jsp?pid=167064

 
...dimenticavo...secondo me, se senti il bisogno di riutilizzare un
identificatore di variabile, potenzialmente di tipo diverso,
significa che il tuo codice non e' abbastanza ben progettato: suddividilo
in piu' metodi o addirittura in piu' classi.


 for ( {ClasseA a; ClasseB b; int i=0}; i<10; i++)... ?
Nella parte di inizializzazione di un ciclo for possono essere
inizializzate solo le variabili di controllo che in genere sono
dello stesso tipo.
Quello che chiedi credo che non si possa fare.


 1° caso: for ( { int i; double j; } ; ; ) 2° caso: for ( int i, j; ; )
Come ho scritto precedentemente i e j sono le variabili di controllo
del ciclo for, dovendo essere comparabili devono essere delle stesso tipo,
a meno di un cast, ma tanto vale dichiararle dello stesso tipo ^_^
Tutto quello che non serve all'iterazione (inteso come variabili non di
controllo) va dichiarato fuori dal ciclo for.


 nemmeno.
Porca miseria! Hai ragione! E non ci avevo neanche fatto caso!
Così eseguivo praticamente un ciclo a vuoto!
A questo punto, allora, il costrutto più giusto sembra proprio essere il
while.
Grazie mille, Bye, Animanera. :)

...
