thể Duplicates:
c# - getting the same random number repeatedly
Random number generator not working the way I had planned (C#)Random Number Generation - Cùng Số trở
Tôi có một phương pháp mà xây dựng một danh sách các ints:
public Queue<int> generateTrainingInts(int count = 60)
{
Queue<int> retval = new Queue<int>();
for (int i = 0; i < count; i++)
{
retval.Enqueue(JE_Rand.rInt(2001, 100));
}
return retval;
}
JE_Rand .rInt() chỉ là một hàm đại biểu es đến một chức năng của lớp Random:
public static int rInt(int exclUB, int incLB = 0)
{
Random rand = new Random(DateTime.Now.Millisecond);
int t = rand.Next(incLB, exclUB);
rand = null;
return t;
}
Nhưng khi tôi gọi generateTrainingInts, cùng một số được enqueued mỗi lần. Tuy nhiên, nếu tôi thay đổi rInt để sử dụng một thể hiện tĩnh của lớp Random, thay vì một cá thể cục bộ (với phạm vi hàm như được định nghĩa ở trên), thì nó hoạt động chính xác (enqueue random integer). Có ai biết tại sao điều này xảy ra không?
Chỉnh sửa: Kính gửi những người trả lời không đọc kỹ câu hỏi của tôi, Giống như một số bạn đã chỉ ra, tôi đang tìm kiếm giải thích tốt về lý do điều này xảy ra. Tôi không tìm kiếm giải pháp cho cùng một vấn đề được tạo ra bằng số, bởi vì tôi đã sửa lỗi đó như tôi đã nói ở trên. Cảm ơn sự nhiệt tình của bạn mặc dù :) Tôi thực sự chỉ muốn hiểu những điều như thế này, bởi vì thực hiện đầu tiên của tôi có ý nghĩa hơn về khái niệm với tôi.
vẻ trùng lặp ... Nhìn vào câu hỏi realted như -http: //stackoverflow.com/questions/1437825/random-number-generation-in-c –
Nó xảy ra bởi vì các 'đối tượng Random' được khởi tạo từ 'Môi trường.GetTickCount', đó là một bộ đếm thời gian mili giây. Vì vậy, nếu bạn gọi hàm tạo 'Random' hai lần trong cùng một mili giây, bạn sẽ nhận được cùng một giá trị ban đầu. –
Khi rand được khởi tạo với cùng một hạt giống (ví dụ: DateTime.Now.Millisecond trong trường hợp của bạn), nó sẽ trả về cùng một chuỗi các giá trị. Bạn nên khởi tạo nó một lần (và lưu trữ nó trong một biến tĩnh), hoặc với các hạt giống khác nhau tại mỗi thời điểm. – AFract