2

次のコードがあります。ランダム r は機能し、約 10% を if に導きます。ただし、rr は機能していないようです。常に 0 を返します。何が間違っていますか?

10% の確率で、2 つの選択肢からランダムに選択したいと考えています。これはasp.netアプリにあります。ボタンのクリックでコードが実行されます。

        Random r = new Random();
        Random rr = new Random();

        int randomnum = r.Next(0, 100);
        if (randomnum <= 10)
        {

            int randompick = rr.Next(0, 2);
            if (randompick == 0)
            {
4

3 に答える 3

4

外側のループのランダム性に満足している場合は、

int randompick = randomnum % 2;

ネストされた Random オブジェクトの代わりに。

于 2012-08-03T23:22:27.047 に答える
1

Random両方のランダムな選択に同じオブジェクトを使用できますよね?

于 2012-08-03T23:32:06.640 に答える
0

前述のように、疑似ランダム ストリームを 1 つだけ使用し、インスタンス化を 1 回だけ行う必要があります。これらの行に沿ってソリューションを構築します。

class SomeWidget
{
    private static Random rng ;

    static SomeWidget()
    {
        rng = new Random() ;
        return ;
    }

    public SomeWidget()
    {
        return ;
    }

    public int DoOneThing90PercentOfTheTimeAndSomethingElseTheRestOfTheTime()
    {
        int rc ;
        int n = rng.Next() % 10 ; // get a number in the range 0 - 9 inclusive.
        if ( n != 0  ) // compare to whatever value you wish: 0, 1, 2, 3, 4, 5, 6, 8 or 9. It makes no nevermind
        {
             rc = TheNinetyPercentSolution() ;
        }
        else
        {
            rc = TheTenPercentSolution() ;
        }
        return rc ;
    }

    private int TheTenPercentSolution()
    {
        int rc ;
        int n = rng.Next() % 2 ;
        if ( n == 0 )
        {
            rc = DoOneThing() ;
        }
        else
        {
            rc = DoAnotherThing() ;
        }
        return rc ;
    }

    private int DoOneThing()
    {
        return 1;
    }

    private int DoAnotherThing()
    {
        return 2 ;
    }

    private int TheNinetyPercentSolution()
    {
        return 3 ;
    }

}
于 2012-08-03T23:42:05.007 に答える