Java 实现一个算法来洗牌一个数字数组
我为下面的问题编写了代码,但它们不起作用。我得到随机数,但洗牌法不会洗牌。你能帮帮我吗Java 实现一个算法来洗牌一个数字数组,java,Java,我为下面的问题编写了代码,但它们不起作用。我得到随机数,但洗牌法不会洗牌。你能帮帮我吗 for( each index i) choose a random index j where j>=i. swap the elements at index i and j. 我的代码是: public static void shuffle(int[] a){ for( int i = 0; i < a.length-1; i++){ int range
for( each index i)
choose a random index j where j>=i.
swap the elements at index i and j.
我的代码是:
public static void shuffle(int[] a){
for( int i = 0; i < a.length-1; i++){
int range = a.length;
int j = (int) (Math.random() * range);
swap(a, i, j);
}
}
public static void swap(int[] array, int i, int j){
if (i != j) {
int temp = array[i];
array[i] = array[j];
array[j] = temp;
}
}
publicstaticvoidshuffle(int[]a){
for(int i=0;i
有java.util.Collections.shuffle,可用于列表。我建议从src复制粘贴算法,并将其更改为使用int[]:
public static void shuffle(int[] a) {
Random rnd = new Random();
for (int i = a.length; i > 1; i--) {
swap(a, i - 1, rnd.nextInt(i));
}
}
private static void swap(int[] a, int i, int j) {
int tmp = a[i];
a[i] = a[j];
a[j] = tmp;
}
public static void main(String[] args) {
int[] a = {1, 2, 3, 4, 5, 6, 7, 8, 9};
shuffle(a);
System.out.println(Arrays.toString(a));
}
印刷品
[8, 7, 3, 4, 6, 1, 2, 5, 9]
将数组转换为整数包装类,并通过将整数数组转换为列表来调用Collections.shuffle。下面是代码片段 您应该有权访问ApacheLang库,然后可以使用ArrayUtils.toObject(int[])方法,如下所示:
int [] array = {1,2,3,4,5,6};
Integer[] newArray = ArrayUtils.toObject(array);
Collections.shuffle(Arrays.asList(newArray));
for (int i = 0; i < newArray.length; i++) {
System.out.println(newArray[i]);
}
有什么问题吗?你的交换方法在哪里?对
j>=i
的要求发生了什么?在任何情况下,当你可以洗牌的时候为什么要洗牌:看,我不知道那会是什么代码。我在哪里可以找到java.util.Collections.shuffle?我在java API中看不到它。@user1995200查找集合
类和洗牌
是itI中的一个静态方法,我可以看到,但这里没有代码,只是解释而已。
Integer[] newArray = new Integer[array.length];
int i = 0;
for (int value : array) {
newArray[i++] = Integer.valueOf(value);
}