2016-02-04 7 views
6

Vor kurzem hatte ich eine Diskussion über die Verwendung von nicht-counter Bedingungen im Zusammenhang in for-Schleifen in Java:For-Schleife Konventionen Zustand

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

Weiß jemand, ob es irgendwelche „offizielle“ Konventionen sind für for- Bedingungen wie diese? Meiner Meinung nach ist es im Vergleich zu lesen leichter zu einem äquivalenten while-Schleife, da alle Loop-Parameter zusammen sind in der ersten Zeile:

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

Oder noch schlimmer:

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

Was meinst du mit nicht-Counter verbundenen Bedingungen? Dies ist definitiv Zähler bezogen. –

+1

Die for-Schleife ist vorzugsweise (IMO), weil 1) "i" auf die Schleife beschränkt ist; 2) Sie müssen sich daran erinnern, bei jeder Iteration "i" zu erhöhen (oder explizit nicht zu erhöhen). Die zweite und die dritte Option hier bringen keinen besonderen Vorteil und sind weniger lesbar (besonders die 'o.addC (++ i);'). –

+0

Mögliches Duplikat von [wenn while-Schleife statt for-Schleife verwendet werden soll] (http://stackoverflow.com/questions/6710601/when-to-use-while-loop-rather-than-for-loop) –

Antwort

1

for Schleifen werden in fast jeder Situation über gleichwertige while Lösung verwendet. Arrays, Listen, Standard-Datenstrukturen.

Auf der anderen Seite while wird üblicherweise mit Bächen und für unendlich lange Iterationen verwendet ..

0

Eine nette Sache über for-Schleifen Gibt es eine Shortcut-Methode? Wenn Sie also alle Elemente in einem Array ausführen möchten, können Sie einfach Folgendes tun:

(doppelte Nummer: arrayName) wo Double ist der Typ, Nummer ist der Name, den Sie jedem Element geben (es doesn ' Es ist wirklich wichtig, wie Sie es nennen, Sie werden sich in diesem Fall auf jeden Wert als "Zahl" beziehen. Und ArrayName ist der Name des Arrays, auf das Sie sich beziehen.

Wenn Sie jedes Element/Objekt erreichen möchten, ist dies der schnellste Weg.

+0

Es heißt eine erweiterte for-Schleife. (Ich nenne es eine foreach-Schleife). Und tatsächlich, es ist nicht die "schnellste" in Bezug auf Geschwindigkeit, weil es unter der Haube Typumwandlungen tun muss und immer noch eine regelmäßige for-Schleife verwendet. –

+0

Ahh Entschuldigung, ich bin selbst ein neuer Programmierer. Ich habe versucht zu helfen, aber ich könnte: p –

0

Wie wäre:

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

Dieses eine Endlosschleife verhindert, wenn AddC nicht wirklich tut, was Sie erwarten.

1

Die meisten Entwickler werden eine for Aussage erwarten, bestehen aus drei Dinge:

  • Initialisierung einer Variablen
  • Abbruchbedingung basierend auf der Variablen
  • Inkrement auf die Variable

Wenn Sie Ihren Code ändern, um unerwartete Dinge zu enthalten, wird es schwieriger zu lesen und somit schwerer zu warten.

Darüber hinaus denke ich, die while Schleife macht Ihre Absicht deutlicher: etwas tun, während o.getC() ist weniger als 10. Dieses "Etwas" passiert zufällig: fügen Sie eine fortlaufende Nummer hinzu.

Lange Geschichte kurz: Verwenden Sie eine while Schleife für "nicht-Counter related conditions".