以下代码适用于我一直在进行的项目。输出必须是.txt文件。当while循环运行多次时,我无法让缓冲的写入器写入。我已经尝试过故障排除和测试,但是无法让它工作。如果我做system.out.prints,输出是正确的,所以我认为问题在于缓冲的编写器。我目前没有bw.close(),但我已经尝试将它放在多个位置,但它仍然无效。 bw.write("你好")只是我试图解决问题。我的bw.flush()是否在错误的位置?
我的第二个问题是,这是将输出写入.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 :(得分:0)
当你在循环的每次迭代中创建一个新的FileWriter
时,文件将被覆盖,因此要么在循环之前移动FileWriter
的创建或使用
指示追加的构造函数
尝试通过创建更多方法来模块化代码
E,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
}