2016-02-04 41 views
6

Ho avuto recentemente una discussione su l'uso di non-counter condizioni per-loops relativi a Java:ciclo for convenzioni condizione

for(int i = 0; o.getC() < 10; i++) 
    o.addC(i); 

Qualcuno sa se ci sono delle convenzioni "ufficiali" per per- condizioni come questa? A mio parere è più facile da leggere rispetto ad un equivalente ciclo while perché tutti i loop-parametri sono insieme in prima linea:

int i = 0; 
while(o.getC() < 10) { 
    i++; 
    o.addC(i); 
} 

O peggio ancora:

int i = 0; 
while(o.getC() < 10) 
    o.addC(++i); 
+1

Cosa intendi per condizioni non correlate al contatore? Questo per è decisamente contro-correlato. –

+1

Il ciclo for è preferibilmente (IMO) perché 1) 'i' è circoscritto al ciclo; 2) sei costretto a ricordare di incrementare (o esplicitamente non incrementare) 'i' su ogni iterazione. La seconda e la terza opzione qui non aggiungono alcun vantaggio particolare e sono meno leggibili (specialmente il 'o.addC (++ i);'). –

+0

Possibile duplicato di [quando utilizzare il ciclo while piuttosto che il ciclo] (http://stackoverflow.com/questions/6710601/when-to-use-while-loop-rather-than-for-loop) –

risposta

1

for I loop sono utilizzati praticamente in ogni situazione rispetto alla soluzione equivalente while. Array, liste, strutture dati standard.

D'altra parte while è comunemente usato con i flussi e infinitamente lunghe iterazioni ..

0

Una cosa bella di cicli for c'è un metodo di scelta rapida. Quindi, se vuoi fare tutti gli elementi in un array, puoi semplicemente fare quanto segue:

(doppio numero: arrayName) dove doppio è il tipo, numero è il nome che stai dando ad ogni elemento (non lo fa t importa davvero come lo chiami, in questo caso ti riferirai ad ogni valore come "numero"). E arrayName è il nome dell'array a cui ti riferisci.

Se si desidera raggiungere ogni elemento/oggetto, questo è il modo più veloce.

+0

Si chiama "enhanced for loop". (Lo chiamo un ciclo foreach). E in realtà, non è il "più veloce" in termini di velocità perché sotto la cappa deve fare conversioni di tipo e utilizza ancora un ciclo regolare. –

+0

Ahh scusate, sono un nuovo programmatore anch'io. Cercavo di aiutare comunque potevo: p –

0

ne dite:

for(int i = 0; i < MAX_ITERATIONS; i++) 
{ 
    o.addC(i); 
    if (o.getC() >= 10) 
     return o; // or break 
} 

Questo impedisce un ciclo infinito se ADDC non è realmente facendo quello che ci si aspetta.

1

maggior parte degli sviluppatori si aspettano una dichiarazione for al composto da tre cose:

  • inizializzazione di una variabile
  • Condizione di terminazione basata sulla variabile
  • Incremento sulla variabile

Se si modifica il codice per contenere cose inattese, sarà più difficile da leggere e quindi più difficile da mantenere.

Inoltre, penso che il ciclo while rende la vostra intenzione più chiara: fare qualcosa mentre o.getC() è meno di 10. Questo "qualcosa" sembra essere: aggiungere un numero incrementale.

Per farla breve: utilizzare un ciclo while per "condizioni non correlate al contatore".