ฉันจะสร้างตัวเลขสุ่มภายในช่วงได้อย่างไร
ฉันจะสร้างตัวเลขสุ่มภายในช่วงได้อย่างไร
คำตอบ:
คุณสามารถลอง
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
Random()
ใช้เมล็ดที่ขึ้นอยู่กับเวลา แต่การเขียนที่ชัดเจนว่าดีกว่าสำหรับการอ่าน
ลองรหัสด้านล่าง
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
สิ่งที่ต้องการ:
var rnd = new Random(DateTime.Now.Millisecond);
int ticks = rnd.Next(0, 3000);
DateTime.Now.Millisecond
?
Random
ถูก seeded แล้วด้วยค่าของระบบและMillisecond
เป็นเพียงตัวเลขระหว่าง 0 ถึง 999 หากคู่ของบรรทัดนี้อยู่ด้วยกันเสมอในรหัสจะมีค่าที่เป็นไปได้ 1,000 ค่าrnd.Next
เนื่องจากเมล็ดถูกรีเซ็ตในแต่ละครั้ง เมล็ดเดียวกันเข้าหมายเลขสุ่มออกมาเหมือนกัน ฉันจะปล่อยเมล็ดพันธุ์ด้วยตนเองออก
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;
นอกเหนือจากคลาสแบบสุ่มซึ่งสร้างจำนวนเต็มและคู่พิจารณา:
Stack Overflow question การสร้างของ (pseudo) ค่าที่ จำกัด แบบสุ่มของ (U) Int64 และทศนิยม
นี่คือรุ่นที่ปรับปรุงจากคำตอบ 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);
double rDouble = (r.NextDouble()*2)-1.0;