Tạo một số ngẫu nhiên trong một phạm vi bằng C #


267

Làm thế nào để tôi đi về việc tạo ra các số ngẫu nhiên trong một phạm vi?

Câu trả lời:


419

Bạn co thể thử

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

Có một cái nhìn

Lớp ngẫu nhiên , Phương pháp ngẫu nhiên . Phương thức tiếp cận (Int32, Int32)Phương pháp ngẫu nhiên.


30
Chỉ cần thêm một ghi chú, nếu bạn đang sử dụng NextDouble () và không muốn giới hạn dưới bằng không. Bạn nhân với chênh lệch giữa giới hạn cao hơn và giới hạn dưới, sau đó thêm chênh lệch giữa giới hạn dưới và không. Vì vậy, từ -1 đến 1 double rDouble = (r.NextDouble()*2)-1.0;
Tom Heard

2
Hoặc một trình tạo kép đơn giản hóa trong phạm vi -1.0 và 1.0: Double randDoubleY = new Random (). Tiếp theo (-100, 100) / 100.0D;
BoiseBakes

1
Random()sử dụng một hạt giống phụ thuộc vào thời gian, nhưng viết ra một cách rõ ràng là tốt hơn cho khả năng đọc.
Evgeni Sergeev

44

Hãy thử mã dưới đây.

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

Cái gì đó như:

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

2
là gì DateTime.Now.Millisecond?
Hille

1
Bạn cần đặt một cái gì đó để nó bắt đầu với ...... đối tượng Random chỉ đơn giản là thực hiện nhiều phép toán trên giá trị bạn đưa ra và thực hiện theo cách mà mỗi lệnh gọi Next () trên cùng một đối tượng Random sẽ dẫn đến trong một giá trị khá ngẫu nhiên cho cuộc gọi trước. Để làm cho kết quả ngẫu nhiên hơn trên các đối tượng Ngẫu nhiên khác nhau , bạn bắt đầu với một số khác - ở đây, DateTime.Now.Millisecond. Nếu bạn đặt một hằng số, thay vì giá trị thay đổi, bạn sẽ nhận được kết quả tương tự từ .Next ().
Mike M

12
Randomđã được gieo hạt giống với một giá trị hệ thống và Millisecondchỉ là một số trong khoảng từ 0 đến 999. Nếu cặp dòng này luôn ở cùng nhau trong mã, sẽ chỉ có 1000 giá trị có thể rnd.Nextdo hạt giống được đặt lại mỗi lần. Cùng một hạt giống, cùng một số ngẫu nhiên. Tôi sẽ bỏ hạt giống thủ công.
John McDonald

@JohnMcDonald, bạn đúng rồi. Chỉ cần chính xác, nó được khởi tạo với Environment.TickCount.
Parag Meshram

11

Sử dụng:

Random r = new Random();
 int x= r.Next(10);//Max range

2
Điều này không chỉ định một phạm vi.
Cầu thủ chạy cánh Sendon

1
Bạn chỉ cần thực hiện low_value + r.Next (10) để có được một phạm vi ngẫu nhiên.
Austin Salgat

6

Đối với những người đọc trong tương lai nếu bạn muốn một số ngẫu nhiên trong một phạm vi, hãy sử dụng mã sau đây:

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

C # Nhân đôi ngẫu nhiên giữa tối thiểu và tối đa

Mẫu mã


2
Công thức nên theo cách sau:return new Random().NextDouble() * (maxNumber - minNumber) + minNumber;
Frank Sebastià


3

Đây là phiên bản cập nhật từ câu trả lời của Darrelk . Nó được thực hiện bằng các phương thức mở rộng C # . Nó không phân bổ bộ nhớ ( new Random () ) mỗi khi phương thức này được gọi.

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

Cách sử dụng (đảm bảo nhập không gian tên có chứa lớp 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);
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.