如何为递归算法实现“取消”按钮?

时间:2016-01-11 12:19:57

标签: java recursion cancellation

我正在尝试在文件夹同步应用中为算法实现“取消”按钮。该算法递归地通过用户指定的目录结构,将其文件和目录放入TreeView中,并根据它们是否相对于其他文件夹中的等效项新,删除,更改或更改来标记它们。简化代码参考:

fillInTreeView(File x, TreeItem root) {
    if (x.isFile()) {
        newBranch = makeBranch(x.getName(x.getNameCount() - 1).toString(), root);
        assignMark(newBranch);
    } else {
        newBranch = makeBranch(x.getName(x.getNameCount() - 1).toString(), root);
        assignMark(newBranch);
        fillInTreeView(x, newBranch);
    }
}

我感到不安的是“取消”的含义。如果我从顶部删除树中的所有内容,那么函数是否会继续添加新内容,从取消算法尚未到达的文件调用自身,使整个按钮毫无意义?我想我宁愿先问一下,而不是花几天时间试图实施它,只是要稍后再问一下,重新发现美国。

2 个答案:

答案 0 :(得分:4)

试试这样:

private static boolean cancelled = false;

fillInTreeView(File x, TreeItem root) {
   if(cancelled) return;
   if (x.isFile()) {
        newBranch = makeBranch(x.getName(x.getNameCount() - 1).toString(), root);
        assignMark(newBranch);
    } else {
        newBranch = makeBranch(x.getName(x.getNameCount() - 1).toString(), root);
        assignMark(newBranch);
        fillInTreeView(x, newBranch);
    }
}

/*Your CLick-Listener*/
public void onClick(){
       cancelled = true;
}

答案 1 :(得分:0)

您应该有一个返回条件,只是导致函数返回该条件。通过在递归调用后检查此返回,您甚至可以快速崩溃甚至数千次递归。

相关问题