** Es ist eine Geschichte **
Nicht nur Java, beim Schreiben eines Programms müssen Sie manchmal mehrere for-Schleifen schreiben.
Beispiel: Ich möchte alle Elemente eines dreidimensionalen Arrays vom Typ int auf 1 setzen.
final int n = 10;
final int[][][] cube = new int[n][n][n];
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
for (int k = 0; k < n; k++) {
cube[i][j][k] = 1;
}
}
}
Eine solche Schleife führt jedoch zu einer tiefen Verschachtelung und einer unnötigen Erhöhung der Anzahl von Zeilen, was zu einer Verschlechterung der Wartbarkeit des Programms führt. Betrachten wir daher eine Methode, um mehrere for-Schleifen einzeln zu machen.
Um das Problem zu lösen, überprüfen Sie zunächst die Syntax der for-Schleife. [Eclipse JDT](https://help.eclipse.org/2019-12/index.jsp?topic=%2Forg.eclipse.jdt.doc.isv%2Freference%2Fapi%2Forg%2Feclipse%2Fjdt%2Fcore%2Fdom% Gemäß 2FEnhancedForStatement.html) hat die for-Anweisung die folgende Struktur.
for ( [ ForInit ]; [ Expression ] ; [ ForUpdate ] ) Statement
Darüber hinaus sind ForInit und ForUpdate wie folgt definiert.
ForInit: Expression { , Expression } ForUpdate: Expression { , Expression }
Da "ForInit" und "ForUpdate" mehrere Ausdrücke angeben können, scheint es möglich zu sein, eine Variablenaktualisierung in "ForUpdate" zu schreiben, wobei die Deklaration jeder Variablen in mehreren for-Schleifen in "ForInit" erforderlich ist.
Lassen Sie uns nun tatsächlich eine einzelne for-Schleife erstellen.
Im vorherigen Beispiel gibt es drei erforderliche Variablen, "i, j, k", also lautet die Initialisierungsformel
int i = 0, j = 0, k = 0
Es scheint in Ordnung zu sein.
Als nächstes folgt der (End-) Bedingungsausdruck. In diesem Fall wird das "i", das die äußerste Schleife steuert, unabhängig von den Werten von "j" und "k" verwendet.
i < n
Kann geschrieben werden als.
Lassen Sie uns abschließend über die Aktualisierungsformel nachdenken.
Denken Sie in der Reihenfolge (k-> j-> i
) an die Variablen, die das Innere der Schleife steuern.
Erstens sollte in Bezug auf "k" jedes Mal, wenn eine Schleife erstellt wird, inkrementiert werden, und es sollte 0 werden, wenn der Wert von k zu n wird.
k = (k + 1) % n
Kann geschrieben werden.
Als nächstes ist in Bezug auf "j" der Aktualisierungszeitpunkt von "j" der Zeitpunkt, zu dem "k" 0 wird, und der Wert ändert sich ansonsten nicht.
j = k == 0 ? (j + 1) % n : j
Es wird.
Schließlich "i", aber der Aktualisierungszeitpunkt ist "k == 0 && j == 0"
i = j == 0 && k == 0 ? i + 1 : i
ist.
Wenn die bisherigen Ergebnisse integriert sind, können sie wie folgt umgeschrieben werden.
final int n = 10;
final int[][][] cube = new int[n][n][n];
for (int i = 0, j = 0, k = 0; i < n; k = (k + 1) % n, j = k == 0 ? (j + 1) % n : j, i = j == 0 && k == 0 ? i + 1 : i) {
cube[i][j][k] = 1;
}
Im Vergleich zum Code der ersten Dreifachschleife ist die Verschachtelung reduziert und scheint einen ordentlichen Eindruck zu hinterlassen.
Dieses Mal habe ich vorgestellt, wie mehrere for-Schleifen in einzelne Schleifen konvertiert werden. Bitte verwenden Sie dies als Referenz, um die Lesbarkeit Ihres Codes zu verbessern!
Recommended Posts