2017-10-10 19 views
1

我在我的Windows窗體上添加了五個隨機卡到我的列表上的按鈕。 隨機卡顯示在列表框中。 當我第一次按下按鈕時,列表框顯示5張隨機卡片。 當我再次按下按鈕時,列表框會顯示3次相同的5張隨機卡。 而不是10個隨機卡。 有沒有辦法擺脫這個問題?添加5個隨機卡到列表框,列表框顯示相同卡

private void RandomButton_Click(object sender, EventArgs e) 
    { 
     Random random = new Random(); 
     for (int i = 0; i < 5; i = i + 1) 
      fiveRandomCards.Add(new Card((Symbool)random.Next(1, 4), (Waarde)random.Next(1, 14))); 
     foreach (Card card in fiveRandomCards) 
      CardsLB.Items.Add(card.name);     
    } 
+2

每次單擊按鈕時都不要創建一個新的「Random」對象。爲它創建一個類字段並在創建表單時對其進行實例化。 – itsme86

+1

偏題:請在命名變量,方法等時嘗試使用英文而不是您的母語。您和其他開發人員會發現它非常有用,請相信我 – Alex

+0

以一整套卡片開始,刪除5並將它們放入列表中 - 現在您不能重新選擇它們 – BugFinder

回答

0

其實我喜歡這種方法爲小集合

linq: order by random

僞代碼

ICollection<int> coll = new List<int>() {1,2,3,4,5,6,7,8,9,10,11,12,13,14}; 
ICollection<int> randomFiveItems = coll.OrderBy(x => Guid.NewGuid()).Take(5); 

然後結合着你們控制randomFiveItems

KaartenLB.DataSource = randomFiveItems; 

KLAR毛皮密歇根州

0

我發現我的問題的解決方案,這是很簡單的。 我在我的程序中有2個列表: 第一個列表是「deck」,它已經包含52張卡片,這些卡片是在我的Form1_load方法中生成的。 第二個列表是「fiveRandomCards」。 在我的Windows窗體上,我有一個按鈕。 當我點擊這個按鈕時,它會從我的套牌列表中添加5張拉登卡到fiveRandomCards列表中。 我向列表框添加了一個clear()方法,所以列表框中的項目不會堆疊。請記住,在我的卡片類中,我使用了2個枚舉:符號 - >鑽石,俱樂部,心臟和黑桃。 值 - >從1到13.

public partial class Form1 : Form 
{ 
    List<Card> deck = new List<Card>(); //allready has 52 cards in it. 
    List<Card> fiveRandomCards = new List<Card>(); 
    Random random = new Random(); 

    private void Form1_Load(object sender, EventArgs e) 
     { 
      for (int symbol = 1; symbol < 5; symbol = symbol + 1) 
      { 
       for (int value = 1; value < 14; value = value + 1) 
        deck.Add(new Card((Symbol)symbol, (Value)value)); 
      } 
     } 
    private void RandomButton_Click(object sender, EventArgs e) 
    { 
     for (int i = 0; i < 5; i = i + 1) 
      fiveRandomCards.Add(deck[random.Next(0, deck.Count)]); 
     CardsLB.Items.Clear(); 
     foreach (Card card in fiveRandomCards) 
      CardsLB.Items.Add(card.name);     
    } 
}