使用随机数改组数组

时间:2014-08-25 06:29:56

标签: java shuffle

我的程序有时运行,但有时它会无限运行,因为随机数生成器会一次又一次地生成相同的数字。

public static String[] shuffleElements(final String[] elements) {
    String[] shuffledArray = new String[elements.length];
    Set<Integer> generatedIndices = new HashSet<Integer>();
    for(int i=0;i < elements.length; i++) {
        int index = -1;
        do{
            index = r.nextInt(elements.length);
            System.out.println(i + ", " + index);
        }while(index == i || generatedIndices.contains(index));
        generatedIndices.add(index);
        assignments[i] = elements[index];
    }
    return shuffledArray;
}

如何解决此问题?有没有更好的方法呢?

2 个答案:

答案 0 :(得分:1)

您可以使用Collections#shuffle(list)方法对元素进行非常简单的改组。

public static String[] shuffleElements(final String[] elements) {
    List<String> list = Arrays.asList(elements);
    Collections.shuffle(list);
    return (String[]) list.toArray();
}

此方法使用默认的随机源。但是,如果要为随机性指定自己的源,可以使用此重载的Collections#shuffle(list, random)方法来执行此操作。

答案 1 :(得分:0)

试试这个

Collections.shuffle(Arrays.asList(elements));