2009-06-17 9 views
6

Tôi đang cố gắng tạo một số ngẫu nhiên khác mỗi khi phương thức RandomNumber của tôi được gọi từ vòng lặp for của tôi. Ngay bây giờ, nó trả về cùng một số mỗi lần.Phương pháp RandomNumber trả về cùng một số mỗi lần gọi là

Đây là phương pháp randomNumber tôi:

private int RandomNumber(int min, int max) 
    { 
     Random random = new Random(); 
     return random.Next(min, max); 
    } 

Đây là bối cảnh Tôi đang sử dụng nó trong: (đó là một chút lộn xộn chỉ vì tôi đã rối tung với cố gắng để làm cho nó làm việc ....)

 for (int i = 0; i < charsRaw.Length; i++) 
     { 
      int max = charsRaw.Length - 1; 
      int rand = 0; 
      rand = RandomNumber(0, max); 

      charsNew[i] = charsRaw[rand]; 
      text2 += charsNew[i]; 

     } 

Tôi dường như không thể trả lại giá trị khác mỗi lần được gọi với vòng lặp for.

Mặc dù, khi tôi gắn một MessageBox.Show (rand.ToString()) sau văn bản2 + = charsNew [i], nó mang lại cho tôi một giá trị khác nhau mỗi lần và hoạt động theo cách tôi dự định. Lạ thật.

Cảm ơn! Eric

Trả lời

17

Khởi tạo ngẫu nhiên một lần. Gọi .Next() nhiều lần trên cùng một trường hợp.

MSDN:

Thế hệ số ngẫu nhiên bắt đầu từ một giá trị giống. Nếu hạt giống là sử dụng nhiều lần, cùng một loạt các số được tạo ra

Nếu bạn muốn lặp đi lặp lại nhanh chóng ngẫu nhiên, sử dụng một hạt giống khác nhau mỗi lần.

+0

Cảm ơn! Điều này đã làm việc! – Eric

+4

Đoạn cuối cùng là một chút sai lầm. new Random() thực hiện chính xác điều đó, nghĩa là gieo hạt giống với thời gian hiện tại. Vì bạn làm điều này trong một vòng lặp chặt chẽ, bạn sẽ nhận được nhiều trường hợp giống hệt nhau, tất nhiên, mang lại trình tự giống hệt nhau. Gieo hạt bằng tay với thời gian hiện tại không phục vụ để làm cho mọi thứ tốt hơn ở đây. Ngoài ra, bạn sẽ nhận được khá nhiều phụ thuộc tuyến tính trong hạt giống là một điều xấu cho ngẫu nhiên trong hầu hết các máy phát điện (xem http://portal.acm.org/citation.cfm?doid=1276927.1276928) – Joey

+0

cuộc gọi tốt. tôi sẽ chỉnh sửa. – anthony

1

Không có gì nói rằng một chuỗi thực sự ngẫu nhiên không thể là cùng một số mỗi lần! :-) Có một xác suất nhỏ nó là legit, do đó bạn có thể không bao giờ thực sự chắc chắn. vịt để che

+0

http://web.archive.org/web/20011027002011/http://dilbert.com/comics/dilbert/archive/images/dilbert2001182781025.gif –