/ / Impression de compteurs dans des boucles imbriquées - Java, boucles

Impression de compteurs dans des boucles imbriquées - Java, boucles

J'essaie de concaténer des compteurs dans des boucles imbriquées, la boucle interne ayant un maximum plus petit, de sorte que ma sortie devrait indiquer:

1.1
1.2
1.3
1.4
2.1
2.2
2.3
2.4....

Lorsque la boucle interne termine ses cycles, elle redémarre lorsque la boucle parente est rétablie.

Maintenant j'ai

import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;
public class ForLoop
{

public static void main(String[] args) throws Exception{
try {
PrintWriter out = new PrintWriter(new BufferedWriter(new FileWriter("/Users/evanlivingston/1.txt", true)));

for ( int counter = 0; counter <= 15; counter++ )
out.println( counter );
for ( int counter2 = 0; counter2 <=4; counter2++)
out.print( counter2 );
out.close();
} catch (IOException e) {
}
}
}

Il semble que je doive construire une variable composée de variables (les compteurs), puis l’imprimer.

Réponses:

1 pour la réponse № 1

Outre l'imbrication manquante, vous devez imprimer la valeur externe dans la boucle interne:

public class ForLoop
{
public static void main (String[] args)
{
for (int outer = 0; outer <= 15; ++outer)
for (int inner = 0; inner <=4; ++inner)
System.out.println (outer + "." + inner);
}
}

Mais comme chaque expression n’est qu’une ligne, nouspeut omettre les accolades ici. :) (Plus précis: la deuxième boucle for est composée de 2 lignes, mais la seconde est recouverte par la première, c'est donc une expression pour le "pour" extérieur.

Pour les boucles, vous utilisez normalement i et j. Sinon, prenez des noms plus raisonnables que counter, qui est un détail d'implémentation, au lieu d'un nom sémantique.


3 pour la réponse № 2

Ce n'est pas toujours une bonne idée d'utiliser des boucles sans accolades:

import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;
public class ForLoop
{

public static void main(String[] args) throws Exception{
try {
PrintWriter out = new PrintWriter(new BufferedWriter(new FileWriter("/Users/evanlivingston/1.txt", true)));

String output = "";
for ( int counter = 1; counter < 16; counter++ ) {
output = Integer.toString(counter) + ".";
for ( int counter2 = 1; counter2 < 5; counter2++) {
out.print(test + Integer.toString(counter2) + "n");
}
}
out.close();
} catch (IOException e) {
}
}
}

Si vous n'utilisez pas d'accolades autour de vos instructions for, seule la ligne suivante de l'instruction for est utilisée dans la boucle. Ainsi, vos boucles for ne sont pas vraiment imbriquées.


1 pour la réponse № 3

Il est à noter que vos boucles for ne sont pas imbriquées. Des bugs tels que ceux-ci sont la raison pour laquelle chaque norme de codage pour Java que j'ai déjà vue impose l'utilisation de { et } pour indiquer avec les instructions doivent être exécutées pour chaque itération.


0 pour la réponse № 4

Vous devriez considérer un certain nombre de choses:

  • Formatez toujours votre code de manière appropriée. Cela réduit la probabilité que vous commettiez une erreur en déterminant le flux de code.
  • Assurez-vous toujours que vous fermez vos poignées. Une bonne pratique pour cela consiste à toujours mettre la fin () dans un bloc enfin, pour s'assurer qu'il est appelé quoi qu'il arrive. Sinon, si vous utilisez C #, utilisez simplement la construction using () {} pour le faire pour vous.
  • Le calcul numérique a tendance à être plus rapide que la concaténation de chaînes, en particulier à l'échelle.

Voici une solution alternative à celles présentées:

public static void main(String[] args) throws IOException {

PrintWriter out = null;

try {

out = new PrintWriter(
new BufferedWriter(new FileWriter(yourFileName, true)));

for ( float i = 1.0F; i < 16; i += 0.1F) {
out.println(String.format("%.1f", i));
if(i >= (((int)i) + 0.4))
{
i += 0.5;
}
}

} finally {
if(out != null)
{
out.close();
}
}

}