回答:
あなたが試すことができます
Random r = new Random();
int rInt = r.Next(0, 100); //for ints
int range = 100;
double rDouble = r.NextDouble()* range; //for doubles
見て
Random Class、Random.Nextメソッド(Int32、Int32)およびRandom.NextDoubleメソッド
Random()
時間依存のシードを使用しますが、読みやすくするためにそれを明示的に書き込む方が優れています。
何かのようなもの:
var rnd = new Random(DateTime.Now.Millisecond);
int ticks = rnd.Next(0, 3000);
DateTime.Now.Millisecond
ですか?
Random
にはすでにシステム値がシードされており、Millisecond
0から999までの数値のみです。この行のペアが常にコード内で一緒にrnd.Next
なっている場合、シードが毎回リセットされるため、可能な値は1000のみになります。同じシードを入力し、同じ乱数を出力します。手動の種は省きます。
Environment.TickCount
ます。
使用する:
Random r = new Random();
int x= r.Next(10);//Max range
将来の読者のために、範囲内の乱数が必要な場合は、次のコードを使用してください。
public double GetRandomNumberInRange(double minNumber, double maxNumber)
{
return new Random().NextDouble() * (maxNumber - minNumber) + minNumber;
}
return new Random().NextDouble() * (maxNumber - minNumber) + minNumber;
整数と倍精度を生成するランダムクラス以外に、次のことを考慮してください。
スタックオーバーフローの質問(疑似)ランダム制約値(U)Int64およびDecimalの生成
こちらは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);
double rDouble = (r.NextDouble()*2)-1.0;