好的,这是我的情况:
我有一个递归函数,它正在计算和打印一些东西到屏幕上。现在我需要输出到文件。
所以我这样做了:
public void recursiveFn(int value) throws FileNotFoundException {
recursiveFn(a);
PrintWriter fileOP = new PrintWriter("file.txt")
fileOp.printf(somevaluefromthisfunction)
}
这种方法的问题是,每次以递归方式调用该函数时,都会创建一个新文件,并删除所有先前的递归调用数据。
现在我的方法是让文件在此函数之外创建通缩。这就是我所做的:
public class MyClass {
PrintWriter fileOP = new PrintWriter("file.txt") //line 2
public void recursiveFn(int value) {
recursiveFn(a);
fileOp.printf(somevaluefromthisfunction)
}
}
这个问题?我收到此错误:第2行出现“未处理的异常类型FileNotFoundException”。在调试此错误的过程中,我的头发损失了近5%!
答案 0 :(得分:2)
问题是您的变量初始化可能会抛出您必须处理的异常。其他人已经展示了一些不同的方法来处理这个问题最好的,IMO,有一个方法可以设置递归方法所需的一切(比如PrintWriter),然后调用递归方法。
public class MyClass {
public void doSomething(int value) {
PrintWriter fileOP = new PrintWriter("file.txt");
this.recursiveFn(value,fileOP);
}
public void recursiveFn(int value,PrintWriter fileOp) {
int a = value + 1; // Or whatever
recursiveFn(a,fileOp);
fileOp.printf(somevaluefromthisfunction);
}
}
答案 1 :(得分:0)
在构造函数中设置fileOP:
public class MyClass {
PrintWriter fileOP; //line 2
public void recursiveFn(int value) {
recursiveFn(a);
fileOp.printf(somevaluefromthisfunction)
}
public MyClass(){
try{
fileOP = new PrintWriter("file.txt");
} catch (FileNotFoundException e){
// do whatever you need to do to handle it
}
}
}
您还可以在递归定义中传递printwriter:
public void recursiveFn(PrintWriter fOP, int a) throws FileNotFoundException {
recursiveFn(fOP, a);
fOP.printf(someFunc(a));
}
我猜你想要将函数的递归调整为逻辑而不是无限。