2016-07-15 4 views
-1

以下のコードは、私が取り組んでいるプロジェクトのコードです。出力は.txtファイルである必要があります。 whileループが複数回実行されるときに、バッファリングされたライターに書き込むことができません。私はトラブルシューティングとテストを試みただけで、動作させることはできません。私がsystem.out.printsを実行した場合、出力は正しいので、問題はバッファされたライターにあると考えています。私は現在、bw.close()を持っていませんが、私はそれを複数の場所に置こうとしましたが、それはまだ動作しませんでした。 bw.write( "hello")はちょうど私がトラブルシューティングしようとしている。私のbw.flush()は間違った場所にありますか?バッファ付きライターで.txtファイルを書き込む

私の2番目の質問は、出力を.txtファイルに書き込む最善の方法ですか?私は新しい方法にオープンであり、Javaの知識を広げるのに役立ついくつかの提案を愛するだろう。

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; 
} 
} 

答えて

0

あなたは、ループの各反復で新しいFileWriterを作成していると、ファイルが上書きので、あなたのループの前にFileWriterの作成を移動したり、

を追加するように指示 コンストラクタを使用するかを取得します

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

、G、複数のメソッドに

電子を作成することによって、あなたのコードをモジュール化してみてください3210

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

これは私がスタックオーバーフローが大好きな理由です。非常に@ Scary Wombatありがとうございます。これを理解しようとする2つの長い夜の後...私の2番目の質問に答えるには、これはこの出力を実装する最良の方法ですか? – cfsprod

+0

出力の仕方はうまくいくようです。しかし私はあなたのコードをユーザーが書いたメソッドをより多く使いこなすことによって少しモジュラー化しようとすることを提案します。 –

+0

詳しいことはありますか?私はかなり新しく、実際にあなたに従うことはありません。 – cfsprod

関連する問題