-2

我为以下问题编写了代码,但它们不起作用。我得到随机数,但随机播放方法不会随机播放它们。你能帮帮我吗?

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

2 回答 2

0

有与 List 一起使用的 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]
于 2013-02-12T05:24:02.103 回答
0

将您的数组转换为 Integer Wrapper 类,并通过将 Integer 数组转换为 List 来调用 Collections.shuffle。片段如下

您应该可以访问 Apache 语言库,然后您可以使用 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]);
}

如果你没有 Apcahe Lang 图书馆,那么你可以这样做

Integer[] newArray = new Integer[array.length];
int i = 0;
for (int value : array) {
    newArray[i++] = Integer.valueOf(value);
}
于 2013-02-12T05:40:33.153 回答