C#を使用して範囲内の乱数を生成する


267

範囲内で乱数を生成するにはどうすればよいですか?

回答:


419

あなたが試すことができます

Random r = new Random();
int rInt = r.Next(0, 100); //for ints
int range = 100;
double rDouble = r.NextDouble()* range; //for doubles

見て

Random ClassRandom.Nextメソッド(Int32、Int32)およびRandom.NextDoubleメソッド


30
NextDouble()を使用していて、下限をゼロにしたくない場合は、メモを追加するだけです。上限と下限の差を掛けてから、下限とゼロの差を加算します。したがって、-1から1の場合 double rDouble = (r.NextDouble()*2)-1.0;
Tom Heard

2
または、-1.0〜1.0の範囲の簡略化されたdoubleジェネレーター:Double randDoubleY = new Random()。Next(-100、100)/ 100.0D;
BoiseBaked

1
Random()時間依存のシードを使用しますが、読みやすくするためにそれを明示的に書き込む方が優れています。
Evgeni Sergeev

44

以下のコードを試してください。

Random rnd = new Random();
int month = rnd.Next(1, 13); // creates a number between 1 and 12
int dice = rnd.Next(1, 7); // creates a number between 1 and 6
int card = rnd.Next(52); // creates a number between 0 and 51

34

何かのようなもの:

var rnd = new Random(DateTime.Now.Millisecond);
int ticks = rnd.Next(0, 3000);

2
DateTime.Now.Millisecondですか?
Hille、2017年

1
あなたはそれを始めるために何かを置く必要があります...... Randomオブジェクトは単にあなたが与える値に対して多くの計算を行い、同じRandomオブジェクトでNext()の各呼び出しが結果として生じる方法でそうします前の呼び出しとはかなりランダムな値で。異なるRandomオブジェクト全体で結果をよりランダムにするために、異なる数値(ここでは、DateTime.Now.Millisecond)から始めます。値を変更するのではなく定数を指定すると、.Next()から同じ結果が得られます。
Mike M

12
Randomにはすでにシステム値がシードされており、Millisecond0から999までの数値のみです。この行のペアが常にコード内で一緒にrnd.Nextなっている場合、シードが毎回リセットされるため、可能な値は1000のみになります。同じシードを入力し、同じ乱数を出力します。手動の種は省きます。
ジョンマクドナルド

@JohnMcDonald、あなたは正しいです。正確には、で初期化されEnvironment.TickCountます。
Parag Meshram


6

将来の読者のために、範囲内の乱数が必要な場合は、次のコードを使用してください。

public double GetRandomNumberInRange(double minNumber, double maxNumber)
{
    return new Random().NextDouble() * (maxNumber - minNumber) + minNumber;
}

C#最小値と最大値の間のランダムなdouble

コードサンプル


2
式は次のようにする必要があります:return new Random().NextDouble() * (maxNumber - minNumber) + minNumber;
フランク・セバスティア


3

こちらはDarrelkの回答から更新されたバージョンです。C#拡張メソッドを使用して実装されます。このメソッドが呼び出されるたびにメモリnew Random())を割り当てるわけではありませ

public static class RandomExtensionMethods
{
    public static double NextDoubleRange(this System.Random random, double minNumber, double maxNumber)
    {
        return random.NextDouble() * (maxNumber - minNumber) + minNumber;
    }
}

使用法(RandomExtensionMethodsクラスを含む名前空間を必ずインポートしてください):

var random = new System.Random();
double rx = random.NextDoubleRange(0.0, 1.0);
double ry = random.NextDoubleRange(0.0f, 1.0f);
double vx = random.NextDoubleRange(-0.005f, 0.005f);
double vy = random.NextDoubleRange(-0.005f, 0.005f);
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.