簡體   English   中英

如何選擇隨機數

[英]How to select random number

我需要得到一個隨機數在C#,內(-15, 15)但沒有產生之間的值(-10, 10)為浮點數。 就像隨機應該帶(-15,-10)(10,15)

有可能得到嗎?

這可以在一行中完成,但為了清楚起見,我把它分開了。

public double GetRandomNumber()
{ 
    //Between 0 and 1
    Random random = new Random();
    double randomNumber = random.NextDouble();

    //Between -0.5 and 0.5;
    randomNumber -= 0.5;

    //Between -5.0 and 5.0;
    randomNumber *= 10.0;

    //Between [-15.0, -10.0] or [10.0, 15.0]
    randomNumber += Math.Sign(randomNumber) * 10.0;

    return randomNumber;
}

一種方法是使用它:

var random = new Random();

var result = random.NextDouble();
if(result < 0.5)
    result = -15 + result * 10;
else
    result = 5 + result * 10;

Random.NextDouble生成介於0.0和1.0之間的數字。
如果它小於0.5,我們將其視為創建負數的指標。

另一種方法,假設您確實需要在結果中使用小數位(因為它不完全清楚)。

Random rand = new Random();
var intValue = rand.Next(10,15);
var decimalValue = rand.NextDouble();
var sign = rand.Next(0,1);
if (sign == 0) sign = -1;
return (intValue + decimalValue) * sign;

生成兩個隨機數。 第一個隨機數將選擇您是在-15到-10范圍內,還是在10到15范圍內,第二個是您希望在該范圍內的距離。

嘗試:

Random random = new Random();
float value = (float) (Math.Sign((random.NextDouble() - 1)) * (10 + 5 * random.NextDouble()));
    static Random r = new Random(2);

    static void Main(string[] args)
    {

        int d = r.Next(-15, 15);
        while ((d >= -15 && d <= -10) || (d >= 10 && d <= 15))
            Console.WriteLine(d);
        Console.ReadLine();
    }

如果你想要整數並且你希望它是高性能的,我會使用:

var rand = new Random();
int value = rand.Next(-5, 7);
return value > 0 ? value + 9 : value - 10;

我假設你想要范圍內的數字:[ - 15,-10]和[10,-15]。 適當調整上面的硬編碼值。 為了使其更高效,可能有一種方法可以進行一些算術運算並避免比較,但我會將其留給評論。

這是一個實現它的靜態方法:

public static int RandomRange(int min, int max, bool includeNegatives = false)
{
    if( min >= max) throw new Exception("min can't be greater than max");
    Random rdm = new Random();
    int num = 0;
    while (num < min) num = rdm.Next(max + 1);
    return num * (rdm.Next() % 2 == 0 ? -1 : 1);
}

打電話給它:

var TenToFifteenNegatives = RandomRange(10, 15, true);
var TenToFifteenNoNegatives = RandomRange(10, 15);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM