-1
以下代碼適用於我一直在研究的項目。輸出必須是.txt文件。當while循環運行多次時,我無法讓緩衝寫入器寫入。我嘗試過故障排除和測試,但無法使其正常工作。如果我做system.out.prints,輸出是正確的,所以我認爲問題在於緩衝寫入器。我目前沒有bw.close(),但我曾嘗試將它放在多個位置,但仍然無法使用。 bw.write(「你好」)只是我試圖解決問題。我的bw.flush()在錯誤的位置?Buffered Writer寫入.txt文件
我的第二個問題是,這是將輸出寫入.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;
}
}
這就是爲什麼我喜歡堆棧溢出。非常感謝@Scary Wombat。經過兩個漫長的夜晚試圖解決這個問題...要回答我的第二個問題是這是實現這個輸出的最好方法嗎? – cfsprod
輸出的方式似乎很好。不過,我會建議通過更多地使用用戶編寫的方法來讓代碼變得更加模塊化。 –
你能否詳細說明一下?我是相當新的,並沒有真正關注你。 – cfsprod