สร้างตัวเลขสุ่มในช่วงโดยใช้ C #


คำตอบ:


419

คุณสามารถลอง

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

มองไปที่

คลาส Random , Random.Next Method (Int32, Int32)และRandom.NextDouble Method


30
เพียงเพิ่มบันทึกถ้าคุณใช้ NextDouble () และไม่ต้องการให้ขอบล่างเป็นศูนย์ คุณคูณด้วยความแตกต่างระหว่างขอบเขตที่สูงขึ้นและขอบเขตที่ต่ำกว่าจากนั้นเพิ่มความแตกต่างระหว่างขอบเขตล่างและศูนย์ ดังนั้นสำหรับวันที่ 1 ถึง 1 double rDouble = (r.NextDouble()*2)-1.0;
Tom Heard

2
หรือเครื่องกำเนิดไฟฟ้าคู่ที่เรียบง่ายในช่วง -1.0 และ 1.0: Double randDoubleY = new Random () ถัดไป (-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

1
คุณต้องใส่อะไรบางอย่างเพื่อให้เริ่มต้นด้วย ...... การสุ่มวัตถุทำคณิตศาสตร์ได้มากมายตามมูลค่าที่คุณให้และทำในลักษณะที่การเรียก Next () แต่ละครั้งบนวัตถุสุ่มเดียวกันจะส่งผลให้ ในค่าค่อนข้างสุ่มเพื่อเรียกก่อนหน้านี้ ในการทำให้ผลลัพธ์แบบสุ่มมากขึ้นในวัตถุสุ่มที่แตกต่างกันคุณเริ่มต้นด้วยตัวเลขที่แตกต่างกัน - ที่นี่ DateTime ตอนนี้มิลลิวินาที หากคุณใส่ค่าคงที่แทนที่จะเปลี่ยนค่าคุณจะได้ผลลัพธ์เดียวกันจาก. Next ()
Mike M

12
Randomถูก seeded แล้วด้วยค่าของระบบและMillisecondเป็นเพียงตัวเลขระหว่าง 0 ถึง 999 หากคู่ของบรรทัดนี้อยู่ด้วยกันเสมอในรหัสจะมีค่าที่เป็นไปได้ 1,000 ค่าrnd.Nextเนื่องจากเมล็ดถูกรีเซ็ตในแต่ละครั้ง เมล็ดเดียวกันเข้าหมายเลขสุ่มออกมาเหมือนกัน ฉันจะปล่อยเมล็ดพันธุ์ด้วยตนเองออก
John McDonald

@JohnMcDonald คุณถูกต้อง Environment.TickCountเพียงเพื่อจะแม่นยำก็จะเริ่มต้นได้ด้วย
Parag Meshram


6

สำหรับผู้อ่านในอนาคตหากคุณต้องการตัวเลขสุ่มในช่วงใช้รหัสต่อไปนี้:

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

C # สุ่มสองครั้งระหว่างนาทีและสูงสุด

ตัวอย่างโค้ด


2
สูตรควรเป็นไปตามวิธีต่อไปนี้:return new Random().NextDouble() * (maxNumber - minNumber) + minNumber;
Frank Sebastià


3

นี่คือรุ่นที่ปรับปรุงจากคำตอบ Darrelk จะดำเนินการโดยใช้C # วิธีการขยาย มันไม่ได้จัดสรรหน่วยความจำ ( ใหม่แบบสุ่ม () ) ทุกครั้งที่เรียกวิธีนี้

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.