我的程序有时运行,但有时它会无限运行,因为随机数生成器会一次又一次地生成相同的数字。
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;
}
如何解决此问题?有没有更好的方法呢?
答案 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));