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