以随机顺序打印数组

时间:2011-10-16 07:50:32

标签: java arrays

如何在java中以随机顺序打印数组?

示例:

int [] myArray = {5,4,3,2,1};

打印时,结果可能是:

3 2 1 4 5

4 3 2 5 1

5 个答案:

答案 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;

}