2017-10-10 6 views
1

내 목록에 5 개의 무작위 카드를 추가하는 버튼이 있습니다. 임의의 카드가 목록 상자에 표시됩니다. 버튼을 처음 누르면 목록 상자에 5 장의 무작위 카드가 표시됩니다. 버튼을 다시 누르면 목록 상자에 같은 5 개의 무작위 카드가 3 번 표시됩니다. 무작위 카드 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

버튼을 클릭 할 때마다 새로운 '임의'개체를 생성하지 마십시오. 양식을 작성할 때 클래스 필드를 작성하고 인스턴스를 작성하십시오. – 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; 

클라는 미시간

0

나는 내 문제에 대한 해결책, 그것은 매우 간단합니다 발견에게 모피. 내 프로그램에 2 개의 목록이 있습니다. 첫 번째 목록은 이미 52 장의 카드를 보유하고있는 "갑판"이며, 이는 Form1_load 메소드에서 생성됩니다. 두 번째 목록은 "fiveRandomCards"입니다. 내 Windows 양식에 단추가 있습니다. 이 버튼을 클릭하면 5 개의 무작위 카드 목록에 5 개의 무덤 카드가 갑판 목록에 추가됩니다. 목록 상자의 항목이 스택되지 않도록 clear() 메서드를 내 목록 상자에 추가했습니다.

명심하십시오. 내 Card 클래스에서는 심볼 -> 다이아몬드, 클럽, 하트 및 스페이드라는 2 개의 enum을 사용합니다. 값 -> 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);     
    } 
}