洗牌 ArrayList

Shuffling an ArrayList

我正在尝试创建一种方法,使用 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);
    }
}

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);

就是这样!打印结果确认

您的实施应确保每个索引至少设置一次。您的 temp.set(rando,(Integer)counter) 随机索引 设置为计数器的值。此外,您必须在循环的每次迭代中更改 rando 的值。

Math.random()

returns a double value with a positive sign, greater than or equal to 0.0 and less than 1.0.

根据 Oracle,因此当您乘以 52.0 时,您得到的值介于 0 和 51.9 之间(含 0 和 51.9)。当转换为整数时,它会被截断为其值的底部,从而为您提供 0 - 51 的范围(含 0 - 51)或数组的大小。