改组ArrayList

时间:2016-02-16 03:51:55

标签: java arrays int shuffle

我试图使用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);
    }
}

2 个答案:

答案 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)的范围,或者数组的大小。