如何在java中以随机顺序打印数组?
示例:
int [] myArray = {5,4,3,2,1};
打印时,结果可能是:
3 2 1 4 5
或
4 3 2 5 1
答案 0 :(得分:11)
你应该看一下Fisher-Yates shuffle。这很容易做到,效率很高。有效地,您将数组逻辑分区为“混乱”部分和“未洗牌部分” - 然后从未洗牌部分重复挑选一个随机元素,并将其与未洗过的部分中的第一个元素交换,以制作洗牌部分的那一部分。
或者,改为创建List<Integer>
,然后使用Collections.shuffle
。遗憾的是,没有相应的数组,但Java的类型系统在使数组或原语通用方面做得不是很好:(
(我假设您知道如何进行打印方面,而且这对您来说是一个非常棘手的方面。)
答案 1 :(得分:1)
创建一个新数组order = {0, 1, 2, 3, 4}
并将其随机播放。然后像
for (int i: order)
System.out.print(myArray[i]);
答案 2 :(得分:1)
在数组的随机元素之间切换:
import java.util.Random;
public class JavaTest {
public static void main(String[] args) {
int[] myArray = {5,4,3,2,1};
Random random = new Random();
for (int i=0; i<20; i++) { // 20: is custom number
int i1 = random.nextInt(myArray.length);
int i2 = random.nextInt(myArray.length);
int tmp = myArray[i1];
myArray[i1] = myArray[i2];
myArray[i2] = tmp;
}
for (int i=0; i<myArray.length; i++)
System.out.print(myArray[i]);
}
}
答案 3 :(得分:0)
创建随机类的实例,然后使用将成为索引的整数i。它落地的地方,在元素之前和元素长度之后计算,然后递归地执行相同的操作。
答案 4 :(得分:0)
int main(){
int array[10]={1,2,3,4,5,6,7,8,9,10};
int i,k,temp;
struct timespec spec;
long ms; // Milliseconds
/* pick a random number from 0 to 9 elements */
for (i = 9;i>0;i--){
clock_gettime(CLOCK_REALTIME, &spec);
ms = spec.tv_nsec / 1.0e6;
srand((int )ms);
temp = rand();
temp = temp % i;
printf(" %d \t ",array[temp]);
k = array[i];
array[i] = array[temp];
array[temp] = k;
}
printf(" %d \t \n ",array[0]);
return 0;
}