2017-08-27 2 views
0

J'ai un tableau comme { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12 }. Je veux écrire ce tableau dans un fichier texte dans l'ordre suivant.Comment écrire un tableau en utilisant 'BufferedWriter' en utilisant un ordre spécifique en Java

1 5 9 
2 6 10 
3 7 11 
4 8 12 

J'ai essayé avec le code suivant. Mais je ne pouvais pas obtenir de sortie comme ça. J'ai un grand ensemble de données et je veux les écrire sur un fichier texte selon l'ordre ci-dessus.

public void writeFile() { 

     try { 
      File file = new File("D:/test.txt"); 
      file.createNewFile(); 

      FileWriter fw = new FileWriter(file.getAbsoluteFile()); 
      BufferedWriter bw = new BufferedWriter(fw); 

      int[] num = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12 }; 
      for (int i = 0; i < num.length; i++) { 

       bw.write(String.valueOf(num[i])); 
       bw.newLine(); 
      } 
      bw.write('\n'); 
      System.out.println(); 
      bw.close(); 

     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
    } 

Répondre

1

Pour ce problème spécifique, vous pouvez essayer une boucle dans une boucle, comme:

for (int i = 0; i < 4; i++) { 
    for (j = 0; j < num.length; j += 4) { 
     bw.write(String.valueOf(num[i + j]) + ' '); 
    } 
    bw.newLine(); 
} 

Cependant, qui fonctionne pour l'ensemble de données spécifique que vous avez. Il est difficile de savoir comment aider plus loin sans connaître le problème spécifique que vous essayez de résoudre, comme le nombre de lignes à écrire et les lignes à mettre sur chaque ligne, mais j'espère que vous en aurez l'idée et que vous pourrez l'adapter à votre problème spécifique. Au lieu de coder en dur '4' comme le contrôle de la boucle et les incréments, je suppose que vous pourriez utiliser les opérateurs 'div' ou 'mod' pour calculer ce que le '4' devrait vraiment être.

1
public static void tst() { 
    int[] num = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12 }; 

    int cs = 3, rs = num.length/cs; 

    for (int r = 0; r < rs; r++) { 
     for (int c = 0; c < cs; c++) { 
      System.out.print(num[c*(cs+1)+r]); 
      System.out.print(" "); 
     } 
     System.out.print("\n"); 
    } 
} 
1 5 9 
2 6 10 
3 7 11 
4 8 12 
+0

j'ai obtenu votre idée. Merci beaucoup pour votre réponse. – Emalka

+0

parfois il est utile d'écrire un peu plus sur la réponse, pas seulement le code :) – sniperd