2012-11-24 11 views
29

Tôi đã chỉ tự hỏi làm thế nào các máy phát điện số ngẫu nhiên trong C# hoạt động. Tôi cũng tò mò làm cách nào tôi có thể tạo một chương trình tạo ngẫu nhiên các số WHOLE INTEGER từ 1-100.Trình tạo số ngẫu nhiên của C# hoạt động như thế nào?

+2

Random random = new Random(); random.Next (1, 101); // Bao gồm 1 và 100 ngẫu nhiên.Next (1, 100); // Bao gồm 1 và loại trừ 100 – AmazingDreams

+3

@AmazingDreams: Không, giới hạn dưới là * bao gồm *. –

+0

@JonSkeet Cảm ơn, đã lâu rồi tôi mới sử dụng nó. Đã thực hiện chỉnh sửa. – AmazingDreams

Trả lời

20

Tôi chỉ tự hỏi làm thế nào các bộ tạo số ngẫu nhiên trong công trình C#.

Thực hiện cụ thể, nhưng wikipedia entry for pseudo-random number generators sẽ cung cấp cho bạn một số ý tưởng.

Tôi cũng tò mò làm cách nào để tạo một chương trình tạo số ngẫu nhiên WHOLE INTEGER từ 1-100.

Bạn có thể sử dụng Random.Next(int, int):

Random rng = new Random(); 
for (int i = 0; i < 10; i++) 
{ 
    Console.WriteLine(rng.Next(1, 101)); 
} 

Lưu ý rằng các giới hạn trên là độc quyền - đó là lý do tôi đã sử dụng 101 đây.

Bạn cũng nên biết một số "gotchas" được liên kết với Random - cụ thể, bạn nên không tạo một phiên bản mới mỗi khi bạn muốn tạo một số ngẫu nhiên, nếu không, nếu bạn tạo nhiều ngẫu nhiên số trong một khoảng thời gian ngắn, bạn sẽ thấy nhiều lần lặp lại. Xem my article on this topic để biết thêm chi tiết.

+0

Tôi có thể chỉ nói một cái gì đó như "Random random = new Random.Next (0, 101);"? –

+2

@SethTaddiken: Không, bạn không thể. (Và tên tôi là Jon, chứ không phải John.) Dựa trên các câu hỏi của bạn cho đến hôm nay, tôi đề nghị bạn nên giữ một cuốn C# giới thiệu tốt. Nó có khả năng hiệu quả hơn nhiều cho việc học ban đầu hơn là hỏi ở đây. –

+0

Vâng, bạn có thể làm việc thông qua một cuốn sách, và vẫn cần được giúp đỡ khi bạn đang cố gắng để chơi xung quanh với các chương trình khác nhau và thông tin không phải là ngay lập tức có sẵn cho bạn. – Danrex

32

Bạn có thể sử dụng Random.Next(int maxValue):

Return: A 32-bit đã ký số nguyên lớn hơn hoặc bằng số không, và ít hơn maxvalue; có nghĩa là, phạm vi giá trị trả lại thường bao gồm số không nhưng không phải maxValue. Tuy nhiên, nếu maxValue bằng 0, maxValue là được trả lại.

var r = new Random(); 
// print random integer >= 0 and < 100 
Console.WriteLine(r.Next(100)); 

Đối với trường hợp này tuy nhiên bạn có thể sử dụng Random.Next(int minValue, int maxValue), như thế này:

// print random integer >= 1 and < 101 
Console.WriteLine(r.Next(1, 101);) 
// or perhaps (if you have this specific case) 
Console.WriteLine(r.Next(100) + 1); 
+0

Cảm ơn des :). Điều này làm việc tuyệt vời. –

+0

@SethTaddiken: Vâng, nó không làm những gì bạn * hỏi * cho, đó là một số từ 1 đến 100. Nó sẽ không bao giờ cung cấp cho bạn 100, nhưng nó * sẽ * cung cấp cho bạn 0. Ngoài ra, bạn nên chắc chắn rằng bạn thực sự hiểu rằng bạn không nên tạo một thể hiện mới của 'Random' mỗi lần. –

+0

Biến sẽ trông như thế nào nếu tôi in ra là một số ngẫu nhiên từ 1 đến 100? –

1

Tôi đã tìm kiếm trên Internet cho RNG một thời gian. Tất cả những gì tôi thấy hoặc là quá phức tạp hoặc không chỉ là những gì tôi đang tìm kiếm. Sau khi đọc một vài bài viết tôi đã có thể đưa ra mã đơn giản này.

{ 
    Random rnd = new Random(DateTime.Now.Millisecond); 
    int[] b = new int[10] { 5, 8, 1, 7, 3, 2, 9, 0, 4, 6 }; 
    textBox1.Text = Convert.ToString(b[rnd.Next(10)]) 
} 

Giải thích đơn giản,

  1. tạo ra một mảng số nguyên 1 chiều.
  2. làm đầy mảng bằng số không có thứ tự.
  3. sử dụng lệnh rnd. Tiếp theo để nhận vị trí của số sẽ được chọn.

Tính năng này hoạt động tốt.

Để có được một số ngẫu nhiên dưới 100 sử dụng

{ 
    Random rnd = new Random(DateTime.Now.Millisecond); 
    int[] b = new int[10] { 5, 8, 1, 7, 3, 2, 9, 0, 4, 6 }; 
    int[] d = new int[10] { 9, 4, 7, 2, 8, 0, 5, 1, 3, 4 }; 
    textBox1.Text = Convert.ToString(b[rnd.Next(10)]) + Convert.ToString(d[rnd.Next(10)]); 
} 

và vân vân cho 3, 4, 5, 6 ... số ngẫu nhiên chữ số.

Hy vọng điều này sẽ hỗ trợ người nào đó tích cực.

+1

rnd. Tiếp theo (10) đã cung cấp cho bạn một số trong phạm vi bạn cần. bạn không cần một dãy số từ 1 ~ 10 để tra cứu – AaA