0

每次程序运行时,如何以随机顺序生成 0,1,2,3(偶数),不重复?

如中,运行这个 for 循环: for( int x = 1; x < 5; x++ ) 和里面的等式,每次以不同的顺序得到 0,1,2,3。

我需要使用 math.random,但无法弄清楚。我最接近的是:

for( int x = 1; x < 5; x++ )    
{
    double rand = (Math.random() * 4) + 1 ;
    int rand1 = (int) rand;

    if( rand1 == 0 )
    {
        System.out.println( songs[rand1].title );
    }
    if ( rand1 == 1 )
    {
        System.out.println( songs[rand1].title );
    }
    if( rand1 == 2 )
    {
        System.out.println( songs[rand1].title );
    }
    if( rand1 == 3 )
    {
        System.out.println( songs[rand1].title );
    }
}

这从来没有给我第一个数字.. 因为它只给了 1-4.. 然后当它超过 4 我相信它会给我一个错误。

期望的输出是每次以随机顺序打印一次的四首歌曲中的每一首。

4

2 回答 2

2

首先,通过添加1,您将随机数的范围从 0-3 转移到 1-4。不要加1。

但是要解决您的问题,要获得不重复的数字,您需要对数字进行洗牌。创建一个数组{0, 1, 2, 3},并多次交换 2 个随机索引的值。

于 2013-10-09T23:36:04.810 回答
0

你用这条线随机化它

double rand = (Math.random() * 4) + 1 ;

这意味着“从 0 - 1 创建数字并与 4 相乘),因此它创建 0-3.999999999999,然后您添加 +1,因此值为 1-4.999999999999。

解决方案 :

double rand = (Math.random() * 4)

或者您可以使用 Random 类,它可以返回 int 范围内的数字:

Random r = new Random();
r.nextInt(4);

不重复的整体解决方案(抱歉,之前没看到)

    Random r = new Random();
    boolean end;
    int randomNumber = -1;
    int numberOfNumbers = 4;

    for (int i = 0; i < 1000; i++) {
        end = false;
        while ( (end == false) && (numberOfNumbers > 1)) {
            int x = r.nextInt(numberOfNumbers);
            if (x != randomNumber) {
                end = true;
                randomNumber = x;
            }
        }
        System.out.println("Randomized this nubmer " + randomNumber);            
    }

当你使用Math.random

    boolean end;
    int randomNumber = -1;
    int numberOfNumbers = 4;

    for (int i = 0; i < 1000; i++) {
        end = false;
        while ( (end == false) && (numberOfNumbers > 1)) {
            int x = (int) (Math.random()*numberOfNumbers);
            if (x != randomNumber) {
                end = true;
                randomNumber = x;
            }
        }
        System.out.println("Randomized this nubmer " + randomNumber);                        
    }
于 2013-10-09T23:36:13.980 回答