洗牌 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)或数组的大小。
我正在尝试创建一种方法,使用 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)或数组的大小。