获取Java中的“for each”循环,以便每次以不同的顺序运行

时间:2010-04-22 10:31:47

标签: java recursion random graph

基本上我的问题是我正在尝试编写一个方法,在字符串图中找到一个随机路径,它的参数是一个起始字符串,一个整数长度和一个存储路径的字符串Vector。我试图通过首先将起始字符串添加到我们的空白向量,通过其邻居递归,直到向量的长度(不包括起始节点)与参数中指定的整数长度相同来尝试这样做。到目前为止,我已经提供了我的代码:

public Vector<String> findRandomPathFrom(String n, int len, Vector<String> randomPath){
    randomPath.add(n);

    if (randomPath.size() == len + 1)
        return randomPath;

    for (String m : this.neighbours(n)){
        if (!randomPath.contains(m) && findRandomPathFrom(m, len, randomPath) != null)
            return randomPath;
    }

    path.setSize(path.size() - 1);
    return null;

}

它似乎工作正常,返回一个路径,其中包含在给定的起始字符串后指定的字符串数。但是,对于任何给定的起始字符串,它每次都会生成完全相同的路径,这种方式会使它成为随机路径生成器的目的。我猜这个问题与我的“for each”循环有关,循环遍历当前字符串的所有相邻字符串。它似乎只是每次都在邻居向量中的第一个字符串。任何人都可以帮我修复这个问题,以便它会选择一个随机的邻居而不是按顺序排列吗?

tl; dr - &gt;在java中获取“for each”循环的任何方式都可以按照随机顺序处理集合,如同选择启动到finsih一样?

提前致谢

1 个答案:

答案 0 :(得分:4)

在迭代之前在邻居列表上使用Collections.shuffle()