返回for循环,不评估Iterator中的所有条目

时间:2012-04-09 05:14:46

标签: java

我在java中遇到for循环的问题。我正在尝试进行迭代深度搜索,并且在深度n处生成子项的代码如下所示:

for(Iterator<puzzleBoard> child = generateSuccessorsIDS(pb).iterator(); child.hasNext();){
    DLS(child.next(),(depth-1));
}

当不使用return语句时,DLS应该这样做,但由于缺少return语句,该值不会到达调用函数。当使用返回DLS(...)时,它只返回迭代器生成的第一个值。怎么解决这个?我粘贴整个DLS及其下面的来电功能。

private puzzleBoard IDS(String initial){
    puzzleBoard pb = new puzzleBoard(initial,0,new Vector<Integer>(),new Vector<puzzleBoard>(),new Vector<puzzleBoard>());

    puzzleBoard result=new puzzleBoard("999999999",0,new Vector<Integer>(),new Vector<puzzleBoard>(),new Vector<puzzleBoard>());
    for(int depth=0;depth<3;depth++){//Repeat
        System.out.println("DP "+depth);
        result = DLS(pb,depth);
        System.out.println("Here: "+result.toString());
        if(result.isGoalState())
            return result;
    }
    return new puzzleBoard("999999999",0,new Vector<Integer>());
}

private puzzleBoard DLS(puzzleBoard pb, int depth){

    pb.printPuzzle();
    if(depth==0 && pb.isGoalState()){
        System.out.println("!!!!!WOOOOOW!!!!!");
        return pb;
    }
    else if(depth>0){
        for(Iterator<puzzleBoard> child = generateSuccessorsIDS(pb).iterator(); child.hasNext();){
            DLS(child.next(),(depth-1));
        }
    }
    else
        return new puzzleBoard("999999999",0,new Vector<Integer>(),new Vector<puzzleBoard>(),new Vector<puzzleBoard>());
    return pb;
}

2 个答案:

答案 0 :(得分:1)

可能是我错了,但我认为你应该把你的for循环放在外面,你实际上是第一次调用你的函数DLS(puzzleBoard pb, int depth) .....在else if只有你的电话里面DLS(pb,depth);

答案 1 :(得分:1)

你循环遍历迭代器中的每个元素并为每个元素调用DLS,但是你会在循环中返回为第一个元素调用它的结果,绕过所有其他元素。您需要决定如何将循环中所有调用的返回值组合到DLS

如果您只想在为每个元素调用null后返回DLS,请在循环后添加return语句。

else if (depth>0) {
    for (...) {
        DLS(...);
    }
    return null;
}