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 № 1Outre 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();
}
}
}