2015-04-22 59 views
1

我正在製作一個賓果遊戲,其中有一個數字列表(1-90)。我隨機選擇一個號碼,但是如何在隨機選擇號碼後刪除該號碼?從列表中隨機選取數字後刪除一個數字

這是我嘗試迄今:

public partial class Form1 : Form 
{ 

    int r = 0; 
    public Form1() 
    { 
     InitializeComponent(); 
    } 

    private void btn_Number_Click(object sender, EventArgs e) 
    { 
     Random random = new Random(); 
     List<int> BingoNumbers = new List<int>(); 

     for(int i = 0; i < 91; i++) 
     { 
      BingoNumbers.Add(i); 
     } 

     r = random.Next(BingoNumbers.Count); 
     BingoNumbers.RemoveAt(r); 
     RichTextBox1.Text = BingoNumbers[r].ToString(); 
     RichTextBox2.Text = BingoNumbers[r].ToString(); 

    } 
} 
+4

嘗試用替換'RemoveAt移除()''刪除()'。此外,當你目前的代碼不能正常工作時,一定要詳細說明它應該做什麼,它現在正在做什麼,以及爲什麼你覺得它是錯誤的。 –

+2

如果你想從1到90的數字,開始循環在1而不是0. – TheWanderingMind

+8

作爲一個附註(除了@GrantWinney上面提供的解決方案),這不會持續按鈕點擊之間的任何狀態。您每次點擊都會生成一個全新的BingoNumbers列表。從列表中刪除值不會對應用程序狀態產生任何影響。 – LiamK

回答

2

每當你點擊那個按鈕,您的列表中得到所有90號補充。我猜它應該每次點擊都包含一個較少的數字,是的?

然後你需要在你的點擊方法之外實例化它。

List<int> BingoNumbers = Enumerable.Range(1, 90).ToList(); 

private void btn_Number_Click(object sender, EventArgs e) 
{ 
    int r = BingoNumbers.OrderBy(bn => Guid.NewGuid()).FirstOrDefault(); 
    BingoNumbers.Remove(r); 
    RichTextBox1.Text = BingoNumbers[r].ToString(); 
    RichTextBox2.Text = BingoNumbers[r].ToString(); 
} 

我也去掉了隨機變量,並與一些LINQ的魔力,它由隨機因素定購您剩餘的賓果號碼,會將第一個參數代替它 - 並將其刪除。 如果Bingonumbers是空的,將剛剛返回0

如果你想實現真正的洗牌,你可以去爲費雪耶茨洗牌:

Random rnd = new Random(); 
//Fisher-Yates-shuffle 
for (int x = BingoNumbers.Count - 1; x > 0; x--) 
{ 
    int y = rnd.Next(x + 1); 
    //Swapping 
    int temp = BingoNumbers[x]; 
    BingoNumbers[x] = BingoNumbers[y]; 
    BingoNumbers[y] = temp; 
} 
//take the first item out of the shuffled list 
int r = BingoNumbers[0]; 
//remove item 
BingoNumbers.Remove(r); 
+0

謝謝,我只是注意到我正在用按鈕做什麼,我現在覺得這樣的困擾 - .- :(我不知道LINQ是什麼,整個int r =行很沒意義,但感謝非常快速的回覆 – Collwyr

+0

請注意,如果速度是一個問題,也可以在創建列表本身時執行基於Guid的shuffle – David

+0

嗨,所以我嘗試了你今天提到的整個代碼,並且我一直在獲取錯誤,我不確定如何修復? 「mscorlib.dll中發生類型'System.ArgumentOutOfRangeException'的第一次機會異常 附加信息:索引超出範圍。必須爲非負數,小於集合 如果有這種異常的處理程序,程序可能是安全地繼續。「 – Collwyr

相關問題