2015-11-14 5 views
8

fand ich gestern aus, dass Sie eine Java for-Schleife zu machen, die wie dieser Das sieht wirklich ungewöhnlich für michIn welchen Fällen wäre es nützlich, einen Befehl in eine Java For-Loop-Aktualisierungsanweisung aufzunehmen?

for (int j = 0; j < myArray.length; System.out.println(j), j++) { 

/* code */ 

} 

aussieht. Wann ist das Codieren so akzeptabel/sinnvoll?

+3

Die Tatsache, dass Sie das ungewöhnlich finden, ist Beweis genug, dass es nicht akzeptabel/nützlich ist. – Tunaki

+1

Ich denke, es könnte Sinn machen, wenn Sie zwei Variablen 'i ++, j ++' –

+2

@PaulBoddington Entschuldigung hatte ich meine C/C++ Hut auf. Ich habe meinen Kommentar zurückgezogen. – lurker

Antwort

2

Die offizielle Java-Dokumentation sagt folgendes über for-Schleifen:

Die allgemeine Form des für Anweisung kann wie folgt ausgedrückt werden:

for(initialization; termination; increment) { 
    statement(s) 
} 

Bei der Verwendung von Beachten Sie bei dieser Version der for-Anweisung:

  1. Die Initialisierung Ausdruck initialisiert die Schleife; Es wird einmal ausgeführt, sobald die Schleife beginnt.
  2. Wenn die Terminierung Ausdruck zu false ausgewertet wird, wird die Schleife beendet.
  3. Der Inkrement Ausdruck wird nach jeder Iteration durch die Schleife aufgerufen; Es ist vollkommen akzeptabel, dass dieser Ausdruck erhöht oder einen Wert dekrementiert.

So, während es möglich, so etwas wie System.out.println(j) in Ihrem Zuwachs Teil haben, ist es gegen die Codierung Konventionen nach der offiziellen Dokumentation.

Der Grund, warum es erlaubt ist, mehrere durch Komma getrennte Anweisungen im Schritt Teil ist zu haben, weil Sie den Wert mehrerer Variablen während der Ausführung der für Schleife müssen einzustellen. Also nur in diesem Fall ist es sowohl akzeptabel und nützlich diesen syntaktischen Zucker zu verwenden. Das folgende Beispiel veranschaulicht dieses Szenario:

for(int i = 0, j = 10; i < 10 && j >= 0; i++, j--) { 
    // Statements 
} 
3

Dies entspricht:

for (int j = 0; j < myArray.length; j++) { 
    System.out.println(j); 
} 

Ich sehe nicht, irgendeinen Vorteil der Verwendung es anders als Schüler in der Prüfung zu betrügen. Es könnte nützlich sein, zu überprüfen, ob der Schüler die Funktionsweise von for gründlich versteht.

7

Ich würde so etwas wie dies immer nur tun, wenn ich zwei Schleifenvariablen hatte, zB:

for(int i = 0, j = 10; i < 10 && j > 0; i++, j--) { 
... 
} 

Abgesehen davon, würde ich tun dies nicht empfehlen, da es, was für Schleife die verschleiert tatsächlich tut. Es wäre besser, Methodenaufrufe mit Nebenwirkungen innerhalb des Körpers zu platzieren.

+1

Oder Sie könnten einfach die 'j> 0 'entfernen. Aber ich mag die Art, wie du denkst. –

2

Eine mögliche Verwendung für die Möglichkeit, zwei Operationen in der Update-Anweisung zu haben, besteht darin, dass Sie zwei Variablen gleichzeitig bearbeiten können. So etwas wie,

for (int i = 0, j = 10; i < 10 && j > 0; i++, j--) { 
    System.out.printf("i = %d, j = %d%n", i, j); 
} 
3

Sie können es auch tun, auf diese Weise

for (int j = 0; j < myArray.length; System.out.println(j++)) { 

} 
1

es tatsächlich den Code mehr Sinn gibt, macht es besser lesbar. Dies ist nützlich, wenn Sie am Ende jeder Iteration mehr als eine Anweisung ausführen müssen (z. B. Erhöhen des Schleifenzählers). Es wird im Allgemeinen verwendet, um mehrdimensionale Arrays zu durchlaufen.

+0

IMO macht es Code nicht lesbar – UserNotFoundException

Verwandte Themen