[Java] Wie man mehrere for-Schleifen einzeln macht

** Es ist eine Geschichte **

Einführung

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.

für die Schleifensyntax

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.

Ich versuchte es

Lassen Sie uns nun tatsächlich eine einzelne for-Schleife erstellen.

Initialisierungsformel

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.

Bedingter Ausdruck

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.

Erneuerungsformel

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.

Ergebnis

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.

abschließend

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

[Java] Wie man mehrere for-Schleifen einzeln macht
Java - So erstellen Sie JTable
So erstellen Sie einen Java-Container
So erstellen Sie ein Java-Array
So erstellen Sie eine Java-Kalenderzusammenfassung
Wie erstelle ich einen Discord Bot (Java)
So wechseln Sie zwischen mehreren Java-Versionen
[Java] So testen Sie, ob es in JUnit null ist
So erstellen Sie eine leichte JRE für den Vertrieb
Wie man ein schattiertes Glas macht
[Java] (für MacOS) Methode zur Einstellung des Klassenpfads
So führen Sie einen Java-Komponententest durch (JUnit & Mockito & PowerMock)
[Für Anfänger] So bedienen Sie die Stream-API nach Java 8
Verwendung von Truth (Assertion Library für Java / Android)
Wie erstelle ich einen MOD für Slay the Spire?
So schleifen Sie Java Map (für jede / erweiterte for-Anweisung)
Ausführen des WebCamCapture-Beispiels von NyARToolkit für Java
So senken Sie die Java-Version
[Java] Verwendung von Map
Verwendung von Java Optional
So minimieren Sie Java-Images
Wie schreibe ich einen Java-Kommentar
Verwendung der Java-Klasse
[Java] So zeigen Sie Wingdings an
Verwendung von Java Map
So legen Sie Java-Konstanten fest
Verwendung von Java-Variablen
So konvertieren Sie Java Base
So initialisieren Sie ein Java-Array
Verwendung von SAS-Token für Azure Event Hubs (Java)
[Ein Muss für einen Java-Ingenieurlehrling] Verwendung der Stream-API
So erstellen Sie ein leichtes Container-Image für Java-Apps
Für Java-Anfänger: Liste, Karte, Iterator / Array ... Wie konvertiere ich?
Vorgang zum Verbinden mehrerer Streams @Java
So legen Sie die Validierung für time_field fest
So installieren Sie JMeter für Mac
Java # 6 studieren (Wie man Blöcke schreibt)
So zerlegen Sie eine Java-Klassendatei
Verwendung von HttpClient (Post) von Java
[Java] Verwendung der Join-Methode
So erstellen Sie einen JDBC-Treiber
Wie man JAVA in 7 Tagen lernt
[Verarbeitung × Java] Verwendung von Variablen
So dekompilieren Sie eine Java-Klassendatei
[JavaFX] [Java8] Verwendung von GridPane
So schreiben Sie eine Java-Variablendeklaration
So erstellen Sie einen Begrüßungsbildschirm
So erstellen Sie ein Jenkins-Plug-In
Verwendung von Klassenmethoden [Java]
[Java] Verwendung von List [ArrayList]
Wie verwende ich Klassen in Java?
Wie erstelle ich ein Maven-Projekt?
So benennen Sie Variablen in Java
So übergeben Sie Oracle Java Silver