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を超えるとエラーが発生すると思います。

必要な出力は、毎回ランダムな順序で 1 回印刷される 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.9999999999999 を作成し、+1 を追加すると、値は 1-4.999999999999 になります。

解決 :

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

または、範囲内の int 数値を返すことができる Random クラスを使用できます。

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 に答える