2011-01-20 36 views

Trả lời

9

Chỉ cần xóa số hạt trong hàm tạo. Hạt giống này về cơ bản là một số mà từ đó danh sách số ngẫu nhiên được tạo ra. Nếu bạn chỉ định một số không đổi, danh sách số ngẫu nhiên của bạn sẽ luôn giống nhau.

Random rand = new Random(); 
rand.Next(); 
+0

sẽ giới hạn số ký tự được tạo hoặc có thể tạo 10000 hoặc 1000000000 – maztt

+0

Tôi không nghĩ rằng có giới hạn về số lượng được tạo. Nó cũng không liên quan đến một số ký tự vì phương thức '.Next()' trả về một số nguyên có dấu 32 bit lớn hơn hoặc bằng 0 và nhỏ hơn MaxValue. –

4

Không chắc chính xác những gì bạn đang sau!

Random rand = new Random(Environment.TickCount); 
rand.Next(); 
+0

+1 trong khi mã số không phải là một hạt giống tuyệt vời, nó ít năng động nhất và cho các mục đích chung có thể * đủ tốt *. –

+0

Trong tương lai, có thể tốt hơn là không cố gắng trả lời câu hỏi khi bạn nói, bạn không chắc chắn chính xác những gì họ đang làm. – DOK

+0

ok cảm ơn, trông giống như tôi giả định giống như mọi người khác anyway :) – WraithNath

7

Bạn chỉ định cùng một hạt giống hãy thử điều này.

Random rand = new Random(); 
rand.Next(); 

Điều này sẽ sử dụng hạt giống mặc định là thời gian.

"Khởi tạo phiên bản mới của lớp Ngẫu nhiên, sử dụng giá trị mặc định phụ thuộc vào thời gian".

Theo MSDN: http://msdn.microsoft.com/en-us/library/system.random.aspx

Re bình luận của bạn ở trên, làm thế nào để tạo ra một số "ngẫu nhiên" trong một phạm vi quy định.

// Generate and display 5 random integers from 50 to 100. 
Console.WriteLine("Five random integers between 50 and 100:"); 
Console.Write("{0,8:N0}", rand.Next(50, 101)); 

(Lấy từ liên kết MSDN ở trên) Bây giờ bạn có thể tạo bất kỳ phạm vi nào bạn muốn.

+0

Có vấn đề với việc sử dụng hạt giống dựa trên thời gian mặc định. Đối với một ứng dụng đa luồng chạy trên một bộ xử lý đa lõi, nó trở nên tương đối khả thi cho hai luồng khác nhau để tạo ra cùng một giá trị ngẫu nhiên giống nhau (vì nó có thể cho chúng lấy chính xác thời gian hệ thống và do đó tạo ra cùng một giá trị) . Tôi muốn sử dụng hàm băm của Guid.NewGuid() làm hạt giống thay thế. – MusiGenesis

+0

Nếu bạn đã loại bỏ một ứng dụng như vậy thì chính xác, tuy nhiên việc sử dụng lớp Random() không nên được sử dụng cho bất cứ điều gì khác ngoài việc làm cho mọi thứ xuất hiện ngẫu nhiên. – LiamB

+0

Câu hỏi được gắn thẻ với "asp.net", chính xác là loại môi trường đa luồng có thể tạo ra các loại vấn đề này. Hai người dùng nhấn cùng một mã cùng một lúc có thể thấy cùng một giá trị "ngẫu nhiên". – LukeH

0
Random rand = new Random(); 
rand.Next(0,1000); // minimum = 0, maximum = 999 
+6

Đáng nói rằng mức tối thiểu được bao gồm, tối đa là độc quyền. Ở trên sẽ tạo ra một số trong phạm vi (bao gồm) 0-999. –

+0

@lain không biết rằng ... mắt tốt – WernerCD

3
Random rand=new Random(DateTime.Now.Millisecond); 
rand.Next(); 

luôn này làm việc cho tôi.

+0

Tại sao không chỉ 'mới ngẫu nhiên()', vì nó sử dụng 'Environment.TickCount' làm hạt giống mặc định? – LukeH

+0

@ LukeH: bạn có tài liệu nào về điều đó không? Tất cả những gì tôi từng thấy trong tài liệu là nó được gieo với một giá trị dựa trên thời gian, điều này không nhất thiết có nghĩa là nó sử dụng 'Environment.TickCount'. – MusiGenesis

+0

@MusiGenesis: Tôi nghĩ rằng nó là một chi tiết thực hiện hơn là một bảo đảm được chỉ định, nhưng nó đủ dễ dàng để xác nhận cho chính mình bằng cách sử dụng ILDASM hoặc Reflector. Hoặc làm một cái gì đó như 'var r1 = new Random(); var r2 = new Random (Environment.TickCount); trong khi (true) Console.WriteLine (r1.Next() == r2.Next()); 'sẽ hiển thị" true "liên tục trừ khi bạn * thực sự * không may mắn và hai nhà xây dựng chạy ở hai bên của dấu tích. – LukeH

Các vấn đề liên quan