2012-04-05 50 views
0
using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Web; 
using System.Web.UI; 
using System.Web.UI.WebControls; 

public partial class _Default : System.Web.UI.Page 
{ 
    private static Random randy = new Random(); 
    protected void Page_Load(object sender, EventArgs e) 
    { 
    } 

    public void Button_Clicked(object sender, EventArgs e) 
    { 
     int count = 7; 

     for (int i = 1; i < count; i++) 
      // if (i == count) 
     { 
      int myInt = nextNo(); 

      string myNum = String.Format("{0}\t", myInt.ToString()); 
      TextBox1.Text += myNum; 
      TextBox2.Text = ("These are your numbers fsdjio"); 
     } 
    } 

    int nextNo() 
    { 
     return randy.Next(1, 45); 
    } 
} 

強大的文本每當重複被發現(樂透程序C#)重做環

的問題是,我經常會得到重複的號碼。如果數字不一樣,有沒有辦法讓循環只進行?謝謝

我正在使用for循環和Random類來製作6個數字的彩票程序。不過,我經常會得到經常性的數字。我是否必須編碼,以便整個過程重複,直到有六個不同的數字?謝謝第一次海報

+1

歡迎來到StackOverflow!請花時間格式化您的代碼,以便閱讀很好。你可以在你的問題下面使用灰色的「編輯」鏈接。這會增加你獲得良好答案的機會,這是對在這裏幫助你的人的尊重。 – Heinzi 2012-04-05 09:58:58

+1

我猜這是作業。如果你想給你的老師/講師留下深刻的印象,那麼你可能想看看這種情況下完美的Fisher-Yates算法。這也很容易實現。 http://en.wikipedia.org/wiki/Fisher%E2%80%93Yates_shuffle – 2012-04-05 10:00:21

回答

2

在我看來,你不應該再做整個循環。請執行以下操作:

var set = new HashSet<int>(); 
for (int i = 0; i < n; i++) 
{ 
    while(!set.Add(nextNo())); 
} 
1

您不需要隨機唯一的數字。你需要洗牌現有的一組數字。他們對SOgoogle有關此主題的很多問題(和答案)。搜索fisher yates shuffle算法,並將其用於您的唯一號碼集。