【发布时间】:2010-04-12 16:00:25
【问题描述】:
我在使用 if 子句时遇到了非常错误的异常处理。如果找不到路径,则会发生异常。异常再次返回该函数。该函数是递归的。安全吗?
$ javac SubDirs.java $ java子目录 给我一条路。 . 目录1 目录2 给我一条路。 它不会找到我,所以它会返回自己,因为捕获到异常 给我一条路。Subdirs.java的代码如下:
import java.io.*;
import java.util.*;
public class SubDirs {
private List<File> getSubdirs(File file) throws IOException {
List<File> subdirs = Arrays.asList(file.listFiles(new FileFilter() {
public boolean accept(File f) {
return f.isDirectory();
}
}));
subdirs = new ArrayList<File>(subdirs);
List<File> deepSubdirs = new ArrayList<File>();
for(File subdir : subdirs) {
deepSubdirs.addAll(getSubdirs(subdir));
}
subdirs.addAll(deepSubdirs);
return subdirs;
}
public static void search() {
try{
BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
String s;
System.out.println("Give me an path.");
while ((s = in.readLine()) != null && s.length() != 0){
SubDirs dirs = new SubDirs();
List<File> subDirs = dirs.getSubdirs(new File(s));
for ( File f : subDirs ) {
System.out.println(f.getName());
}
System.out.println("Give me an path.");
}
}catch(Exception e){
// Simple but is it safe?
search();
}
}
public static void main(String[] args) throws IOException {
search();
}
}
【问题讨论】:
-
您能重新表述一下您的问题吗?我很难理解你在问什么。
-
@Sauer:设 A 为递归函数。根据定义,B 是递归的,因为它返回 A。使用 try-catch-loop 具有内部递归函数的递归函数是否安全?
-
B 返回自身。 A返回自己。 B 具有 A 作为内部结构。 A 是 getSubDirs,B 是搜索。
标签: java error-handling recursion