2015-11-07 1 views
0

J'ai une tâche qui consiste à transmettre des valeurs de tableau (écriture) dans un fichier texte (.txt) en Java. C'est ma première fois en utilisant BufferedWriter et j'ai essayé pas mal de variations sur les instructions if, mais je ne vois pas comment mon programme écrirait au format matrix[i][j] + "," jusqu'à ce qu'il atteigne l'index de la dernière colonne et écrit sans la virgule après l'entier.Ecriture d'un tableau multidimensionnel dans un fichier texte

J'ai essayé d'utiliser la méthode append() que BufferedWriter étend mais je ne pense pas que je l'ai utilisé correctement.

Code actuel

void writeMatrix(String filename, int[][] matrix) { 
    try { 
     BufferedWriter bw = new BufferedWriter(new FileWriter(filename)); 

     for (int i = 0; i < matrix.length; i++) { 
      for (int j = 0; j < matrix[i].length; j++) { 
        bw.write(matrix[i][j] + ","); 
      } 
      bw.newLine(); 
     } 
     bw.flush(); 
    } catch (IOException e) {} 
} 

Courant de sortie

1,2,3, 
4,5,6, 
7,8,9, 

J'ai besoin du dernier chiffre sur chaque ligne pour pas inclure la virgule et BufferedWriter ne semble pas comme ajouter deux méthodes write() ensemble sur la même ligne. Alors, comment pourrais-je faire ça?

+0

Le phrasé "passer un tableau dans un fichier txt" est gênant.Passage se réfère à la transmission d'une valeur ou d'une référence, souvent à une structure de données résidant en mémoire, à un autre processus ou une routine, par exemple. passer des arguments. Vous ne "passez" pas une structure de données à un magasin persistant tel qu'un fichier. – scottb

Répondre

1

Vous pouvez modifier votre plus à l'intérieur boucle for à ceci:

for (int j = 0; j < matrix[i].length; j++) { 
    bw.write(matrix[i][j] + ((j == matrix[i].length-1) ? "" : ",")); 
} 

Cela met un opérateur ternaire simple qui fait cela:

ifj est dernier indice:

  • rien imprimer ()

else

  • imprimer une virgule (,)

Sur demande, ce serait l'équivalent de cette déclaration if-else:

for (int j = 0; j < matrix[i].length; j++) { 
    if(j == matrix[i].length-1) { 
     bw.write(matrix[i][j]); 
    } else { 
     bw.write(matrix[i][j] + ","); 
    } 
} 
+0

Cela a fonctionné! Mais je ne suis pas sûr de comprendre la syntaxe derrière le point d'interrogation et le côlon, je ne les ai pas vu utilisés auparavant? –

+0

C'est essentiellement une déclaration 'if-else' raccourcie. Je vais mettre une alternative plus simple pour vous. –

+0

Et bienvenue dans la communauté SO (ne vous inquiétez pas, votre message a été formaté correctement)! Je suis content d'avoir aidé (n'oubliez pas d'accepter), et passez une bonne journée! –

0

Comparer la matrice [i] .length avec j, puis décider d'imprimer "," ou non.

0

Vous ajoutez simplement une instruction if-else pour décider d'imprimer la virgule ou non.

Espérons que cette aide!

0

Vous pouvez essayer d'ajouter l'instruction if à l'intérieur de l'itération. si j est dans la dernière colonne, il n'imprime pas la virgule dans votre fichier, sinon c'est le cas.

void writeMatrix(String filename, int[][] matrix) { 
    try { 
     BufferedWriter bw = new BufferedWriter(new FileWriter(filename)); 

     for (int i = 0; i < matrix.length; i++) { 
      for (int j = 0; j < matrix[i].length; j++) { 
       if(j == matrix[i].length - 1){  
        bw.write(matrix[i][j]); 
       } else{ 
        bw.write(matrix[i][j] + ","); 
       }   
      } 
      bw.newLine(); 
     } 
     bw.flush(); 
    } catch (IOException e) { 
     //why does the catch need its own curly? 
    } 
} 

Espérons que cela fonctionne!