[Java] Comment rendre plusieurs boucles for uniques

** C'est une histoire **

introduction

Non limité à Java, lors de l'écriture d'un programme, il y a des moments où vous devez écrire plusieurs boucles for.

Exemple: Je souhaite définir tous les éléments d'un tableau tridimensionnel de type int sur 1.

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;
    }
  }
}

Cependant, une telle boucle provoque une imbrication profonde et une augmentation inutile du nombre de lignes, ce qui entraîne une détérioration de la maintenabilité du programme. Par conséquent, considérons une méthode pour rendre unique plusieurs boucles for.

pour la syntaxe de boucle

Pour résoudre le problème, vérifiez d'abord la syntaxe de la boucle for. [Eclipse JDT](https://help.eclipse.org/2019-12/index.jsp?topic=%2Forg.eclipse.jdt.doc.isv%2Freference%2Fapi%2Forg%2Feclipse%2Fjdt%2Fcore%2Fdom% Selon 2FEnhancedForStatement.html), l'instruction for a la structure suivante.

for ( [ ForInit ]; [ Expression ] ; [ ForUpdate ] ) Statement

En outre, ForInit et ForUpdate sont définis comme suit.

ForInit: Expression { , Expression } ForUpdate: Expression { , Expression }

Puisque ForInit et ForUpdate peuvent spécifier plusieurs expressions, il semble possible d'écrire une mise à jour de variable dans ForUpdate avec la déclaration de chaque variable requise dans plusieurs boucles for dans ForInit.

Je l'ai essayé

Maintenant, faisons une seule boucle for.

Formule d'initialisation

Dans l'exemple précédent, il y a trois variables requises, ʻi, j, k`, donc la formule d'initialisation est

int i = 0, j = 0, k = 0

Cela semble aller.

Expression conditionnelle

Vient ensuite l'expression conditionnelle (de fin). Dans ce cas, ʻi qui contrôle la boucle la plus externe quelle que soit la valeur de j, k`

i < n

Peut être écrit comme.

Formule de renouvellement

Enfin, réfléchissons à la formule de mise à jour. Pensez dans l'ordre (k-> j-> i) à partir des variables qui contrôlent l'intérieur de la boucle. Tout d'abord, concernant «k», il devrait être incrémenté à chaque fois qu'une boucle est faite, et il devrait devenir 0 lorsque la valeur de k devient n.

k = (k + 1) % n

Peut être écrit.

Ensuite, en ce qui concerne «j», la synchronisation de mise à jour de «j» est la synchronisation lorsque «k» devient 0, et la valeur ne change pas autrement.

j = k == 0 ? (j + 1) % n : j

Il devient.

Enfin, ʻi, mais le timing de la mise à jour est k == 0 && j == 0`

i = j == 0 && k == 0 ? i + 1 : i

est.

résultat

Lorsque les résultats jusqu'à présent sont intégrés, il peut être réécrit comme suit.

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;
}

Comparé au premier code triple boucle, l'imbrication est réduite et je pense que cela donne une impression nette.

en conclusion

Cette fois, j'ai présenté comment convertir plusieurs boucles for en boucles simples. Veuillez utiliser ceci comme référence pour améliorer la lisibilité de votre code!

Recommended Posts

[Java] Comment rendre plusieurs boucles for uniques
Java - Comment créer JTable
Comment créer un conteneur Java
Comment créer un tableau Java
Comment créer un résumé de calendrier Java
Comment créer un robot Discord (Java)
Comment basculer entre plusieurs versions de Java
[Java] Comment tester s'il est nul dans JUnit
Comment créer un JRE léger pour la distribution
Comment faire un pot ombré
[Java] (pour MacOS) Méthode de définition du chemin de classe
Comment faire un test unitaire Java (JUnit & Mockito & PowerMock)
[Pour les débutants] Comment utiliser Stream API après Java 8
Comment utiliser Truth (bibliothèque d'assertions pour Java / Android)
Comment faire un MOD pour Slay the Spire
Comment faire une boucle Java Map (for Each / extended for statement)
Comment exécuter l'exemple WebCamCapture de NyARToolkit pour Java
Comment abaisser la version java
[Java] Comment utiliser Map
Comment utiliser java Facultatif
Comment réduire les images Java
Comment rédiger un commentaire java
Comment utiliser la classe Java
[Java] Comment afficher les Wingdings
Comment utiliser Java Map
Comment définir des constantes Java
Comment utiliser les variables Java
Comment convertir la base Java
Comment initialiser un tableau Java
Comment utiliser les jetons SAS pour les hubs d'événements Azure (Java)
[À voir absolument pour l'apprenti ingénieur Java] Comment utiliser l'API Stream
Comment créer une image de conteneur légère pour les applications Java
Pour les débutants Java: List, Map, Iterator / Array ... Comment convertir?
Opération pour connecter plusieurs Streams @Java
Comment spécifier la validation pour time_field
Comment installer JMeter pour Mac
Étudier Java # 6 (Comment écrire des blocs)
Comment désassembler un fichier de classe Java
Comment utiliser HttpClient de Java (Post)
[Java] Comment utiliser la méthode de jointure
Comment créer un pilote JDBC
Comment apprendre JAVA en 7 jours
[Traitement × Java] Comment utiliser les variables
Comment décompiler un fichier de classe Java
[JavaFX] [Java8] Comment utiliser GridPane
Comment écrire une déclaration de variable Java
Comment créer un écran de démarrage
Comment créer un plug-in Jenkins
Comment utiliser les méthodes de classe [Java]
[Java] Comment utiliser List [ArrayList]
Comment utiliser les classes en Java?
Comment faire un projet Maven
Comment nommer des variables en Java
Comment passer Oracle Java Silver