2016-07-15 9 views
-1

Der folgende Code ist für ein Projekt, an dem ich gearbeitet habe. Die Ausgabe muss eine TXT-Datei sein. Ich kann den gepufferten Writer nicht zum Schreiben bringen, wenn die While-Schleife mehr als einmal ausgeführt wird. Ich habe versucht, Fehler zu beheben und zu testen und kann es einfach nicht zum Laufen bringen. Wenn ich system.out.prints mache, ist die Ausgabe korrekt, daher glaube ich, dass das Problem beim gepufferten Writer liegt. Ich habe derzeit kein bw.close(), aber ich habe versucht, das an mehreren Stellen zu setzen und es hat immer noch nicht funktioniert. Die bw.write ("Hallo") sind nur ich versuche Probleme zu ertragen. Sind meine bw.flush() an der falschen Stelle?Gepufferter Writer zum Schreiben .txt-Datei

Meine zweite Frage ist, ist dies der beste Weg, um die Ausgabe in eine TXT-Datei zu schreiben? Ich bin offen für neue Wege und würde einige Vorschläge lieben, um meine Kenntnisse über Java zu erweitern.

public class Driver{ 


public static void main(String[] args) { 

    String filepath; 
    BufferedWriter bw = null; 

    // TODO Auto-generated method stub 
    try { 
    System.out.println("To find the determinant of a Matrix, please enter the file below!"); 
    System.out.println("Please enter the file path of the txt file:\n"); 


    Scanner user_input = new Scanner(System.in); 
    filepath = user_input.next(); 

    System.out.println("Filepath read: " + filepath); 
    System.out.println(""); 
    int extCounter = filepath.indexOf('.'); 
    String Output_Path = filepath.substring(0, extCounter); 

    // Read input file 
    Scanner input = new Scanner(new File(filepath)); 

    //while loop to read in the text file 
    while (input.hasNextInt()) { 

     //find the size given by the first int 
     //size is then used to allocate the array 
     //to the correct size 
     int size = input.nextInt(); 
     int[][] a = new int[size][size]; 

     for (int i = 0; i < size; i++) { 
      for (int j = 0; j < size; j++) { 

       try{ 
       a[i][j] = input.nextInt(); 

       } 
       catch (java.util.NoSuchElementException e) { 
       e.printStackTrace(); 
       } 
      } 
     } 

     //Specify the file name and path here 
     //the below code allows the user to enter one path 
     //and get the output file at the same path 
     //without having to enter it twice 
     String OutFile; 
     OutFile = Output_Path.concat("_Output_File15.txt"); 
     File file = new File(OutFile); 

     /* This logic will make sure that the file 
     * gets created if it is not present at the 
     * specified location*/ 
     if (!file.exists()) { 
      file.createNewFile(); 
     } 

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


     //print out the determinant by 
     //calling the determinant method 
     Deter deterMethod = new Deter(); 
     bw.write("The Determinant is: " 
       + deterMethod.determinant(a) + " ..."); 
     int deterInt = deterMethod.determinant(a); 
     System.out.println(deterInt); 
     bw.write("" + deterInt); 
     bw.write("hello"); 
     bw.write(deterInt); 
     bw.flush(); 
     //deterInt = 0; 
     //print a blank line 
     System.out.println(); 

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





//determinant method 
public class Deter 
{ 
public static int determinant(int matrix [][]) { 

    //initializes the sum at 0 
    int sum = 0; 

    //base case 
    //1 x 1 matrix (x) is det(a) = x 
    if (matrix.length == 1) { 
    return matrix[0][0]; 

    } else { 

    //for loop to cycle through the columns 
    for (int j = 0; j < matrix.length; j++) { 

     //equation to figure out the minor of the array given. 
     //Deletes a row and column as provided by the definition 
     //of a minor 
     int[][] minor = new int[matrix.length - 1] 
       [matrix.length - 1]; 

     //for loop to cycle through the rows 
     for (int row = 1; row < matrix.length; row++) { 
      for (int column = 0; 
       column < matrix.length; column++) { 


       if (column < j) { 
       minor[row - 1][column] = matrix[row][column]; 
       } else if (column > j) { 
       minor[row - 1][column - 1] = matrix[row][column]; 
       } 
      } 
     } 

     //recursive equation to get the 
     //sum to find the determinent 
     sum+=matrix[0][j]*Math.pow(-1,j)*determinant(minor); 
    } 
    } 
    //return the sum to be printed out 
    return sum; 
} 
} 

Antwort

0

Wie Sie einen neuen FileWriter in jeder Iteration der Schleife zu schaffen, erhalten die Datei überschrieben, also entweder die Schaffung des FileWriter vor Ihrer Schleife bewegen oder verwenden der Konstruktor die

anhängen anweist

https://docs.oracle.com/javase/7/docs/api/java/io/FileWriter.html#FileWriter(java.io.File,%20boolean)

versuchen, Ihren Code Modularisierung von mehr Methoden

e Erstellen g,

private Scanner getFileScanner() { 

Scanner user_input = new Scanner(System.in); 
String filepath = user_input.next(); 

System.out.println("Filepath read: " + filepath); 
// Read input file 
Scanner input = new Scanner(new File(filepath)); 
return input 
} 
+0

Und deshalb liebe ich Stapelüberlauf. Vielen Dank @Scary Wombat. Nach zwei langen Nächten mit dem Versuch, das herauszufinden ... Um meine zweite Frage zu beantworten, ist dies der beste Weg, um diese Ausgabe zu implementieren? – cfsprod

+0

Die Art der Ausgabe scheint in Ordnung zu sein. Ich würde jedoch vorschlagen, dass versuchen, Ihren Code ein bisschen modular zu machen, indem Sie mehr von den vom Benutzer geschriebenen Methoden verwenden. –

+0

Könnten Sie näher ausführen? Ich bin ziemlich neu und folge dir nicht wirklich. – cfsprod