0

好的,这是我的情况:

我有一个递归函数,它正在计算并将某些内容打印到屏幕上。现在我需要将该输出保存到文件中。

所以我这样做了:

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% 的头发!

4

2 回答 2

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);
    }
}
于 2013-11-12T20:20:50.460 回答
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));
}

我猜你会想要稍微调整函数的递归以使其符合逻辑而不是无限。

于 2013-11-12T20:19:12.030 回答