我为以下问题编写了代码,但它们不起作用。我得到随机数,但是随机播放方法不会随机播放。你能帮帮我吗?
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;
}
}
答案 0 :(得分:0)
java.util.Collections.shuffle与List一起使用。我建议从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]
答案 1 :(得分:0)
将数组转换为Integer Wrapper类,并通过将Integer数组转换为List来调用Collections.shuffle。该片段位于
之下您应该可以访问Apache lang库,然后可以像这样使用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);
}