我正在尝试以随机方式对整数数组列表进行洗牌。我想出了下面的代码。但是,我怀疑这是正确的方法。我在某处读到 for for(int i = list.size(); i >= 1; i--)
in:
public static void shuffling(List<?> list, Random rnd){
for(int i = list.size(); i >= 1; i--){
swap(list, i - 1, rnd.nextInt(i));
}
}
应该写成:
for(int i = list.size(); i > 1; i--)
但是如果我选择将其写为 i > 1
而不是 i >= 1
,我是不是忽略了 ArrayList 中的第一项?有人对解决这个问题的正确方法有什么建议吗?
我的代码:
public class TheCollectionInterface {
public static <E> void swap(List<E> a, int i, int j){
E temp = a.get(i);
a.set(i, a.get(j));
a.set(j, temp);
}
public static void shuffling(List<?> list, Random rnd){
for(int i = list.size(); i >= 1; i--){
swap(list, i - 1, rnd.nextInt(i));
}
}
public static void main(String[] args) {
List<Integer> li1 = new ArrayList<>(Arrays.asList(1,2,3,4,5,6,7,8,9));
Random r1 = new Random();
TheCollectionInterface.shuffling(li1, r1);
System.out.println(li1);
}
}
最佳答案
在此循环中,当 i = 1
时,唯一要选择的元素是第 0 个元素,并且将第 0 个元素与第 0 个元素交换是微不足道的,不会产生任何效果。因此,不需要使用i = 1
进入循环,可以编写i > 1
作为条件。
关于java - 我应该选择 i > 1 还是 i >= 1 进行随机洗牌,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35930293/