我试图使用Arraylist创建一个随机混洗基元数组的方法。我想知道.get();
方法是否是在我的Arraylist上使用的正确方法,在for循环中的正常数组上,它只是array[j];
,其中j是for循环中的值。另外,我对Math.random()不太熟悉;在这种情况下需要一些帮助来实现它。
public static void selectionShuffle(int[] values) {
ArrayList<Integer> temp=new ArrayList<Integer>(52);
int rando=(int)Math.random()*52+1;
for(int counter=0;counter<temp.size();counter++){
temp.set(rando,(Integer)counter);
}
for(int counter=0;counter<values.length;counter++){
values[counter]=temp.get(counter);
}
}
答案 0 :(得分:2)
Collections.shuffle(temp);
就是你需要我的朋友
http://docs.oracle.com/javase/6/docs/api/java/util/Collections.html#shuffle%28java.util.List%29
你可能想要做的就是像你一样创建ArrayList
之后,只需运行常规for-loop
并添加所有52个这样的值
for(int i = 0; i < 52; i++){
temp.add(i);
}
然后就这样做:
Collections.shuffle(temp);
就是这样!打印出结果以确认
答案 1 :(得分:1)
您的实现应确保每个索引至少设置一次。您的temp.set(rando,(Integer)counter)
将随机索引设置为计数器的值。此外,您必须在循环的每次迭代中更改rando
的值。
Math.random()
返回带有正号的double值,大于或等于 0.0和小于1.0。
按照Oracle,所以当你乘以52.0时,得到的值介于0和51.9之间。当强制转换为整数时,它会被截断到其值的下限,为您提供0 - 51(包括0和51)的范围,或者数组的大小。