Понимание поколения 52 карточных объектов - PullRequest
0 голосов
/ 22 марта 2019

Мне удалось вывести на консоль 52 разных «карты», однако проверки, которые я выполнил, чтобы убедиться, что я генерировал отдельные объекты, указывают на то, что я где-то ошибся.
Например, мой конструктор num не увеличивается при создании карточек, а также, когда я повторяю свой список с циклом foreach, все карточки имеют значение 13. Я полагаю, что именно здесь я добавляю свою карточку в колоду, но я не совсем конечно.

Извините, если это вопрос новичка, на который уже был дан ответ!


    {
        public int Suite 
        public int Value 
        public string cardString;
        public int num;
        public Card ()
        { num++; }

      public static void GenerateDeck()
        {
            List<Card> Deck = new List<Card>();
            for (int c = 1; c < 5; c++)
            {
                Card card = new Card();
                {
                    card.Suite = c;                   
                }
                for (int k = 1 ; k <=13; k++)
                {
                    card.Value = k;
                    {
                        switch (card.Suite)
                        {
                            case 1:
                                card.cardString = "Hearts";
                                break;
                            case 2:
                                card.cardString = "Diamonds";
                                break;
                            case 3:
                                card.cardString = "Spades";
                                break;
                            case 4:
                                card.cardString = "Clubs";
                                break;

                        }                   

                        if (card.Value == 1)
                        {
                            card.cardString = "Ace of " + card.cardString;                            
                        }
                        else if (card.Value > 0 && card.Value <= 10)
                        {
                            card.cardString = card.Value.ToString() + " of " + card.cardString;                                                      
                        }
                        else if (card.Value == 11)
                        {
                            card.cardString = "Jack of " + card.cardString;
                        }
                        else if (card.Value == 12)
                        {
                            card.cardString = "Queen of " + card.cardString;
                        }
                        else if (card.Value == 13)
                        { card.cardString = "King of " + card.cardString; }

                        Deck.Add(card);
                    }
                    Console.WriteLine(card.cardString);                  
                }
                Console.ReadLine();
            }

            foreach (var item in Deck)
            {
                Console.WriteLine("CARD SUITE {0} AND CARD VALUE {1}, num{2} ", item.Suite, item.Value, item.num                    
                    );
            }

            Console.WriteLine(Deck.Count);
            Console.ReadLine();
        }
    }
`````

Ответы [ 3 ]

2 голосов
/ 22 марта 2019

Как JAIL указывает в своем ответе, вы создаете только 4 объекта.

Для решения вашей проблемы вам необходимо создать новый Card -объект для каждой итерации внутреннего цикла, например:

for (int c = 1; ...)
{
    for (int k = 1; ...)
    {
        var card = new Card()
        card.Suite = c;
        card.Value = k;
        ...
     }
}
1 голос
/ 22 марта 2019

Создать карту один раз , в самом замкнутом цикле;как то так

  // Possible Suits
  string[] suits = new string[] { "Hearts", "Diamonds", "Spades", "Clubs" };

  // Possible Values: 3 groups combined
  string[] values = new string[] { "Ace" }                     // Ace
    .Concat(Enumerable.Range(2, 9).Select(c => c.ToString()))  // 2..10
    .Concat(new string[] { "Jack", "Queen", "King" })          // Jack, Queen, King
    .ToArray();

  // For each combination of Suit and value ...
  for (int suitIndex = 0; suitIndex < suits.Length; ++suitIndex)
    for (int valueIndex = 0; valueIndex < values.Length; ++valueIndex) {
      // ... we creare a card and add it to deck
      Card card = new Card() {
        Suite = suitIndex + 1,  // + 1 - since arrays are zero based
        Value = valueIndex + 1,
        cardString = $"{values[valueIndex]} of {suits[suitIndex]}"
      };

      Deck.Add(card);

      // Debug purpose only
      Console.WriteLine(card.cardString);  
    } 
1 голос
/ 22 марта 2019

Вы создаете только 4 новые карты:

           for (int c = 1; c < 5; c++)
            {
                Card card = new Card();
                {
                    card.Suite = c;

                }

Затем, после создания каждой из этих 4 машин, вы добавляете один и тот же экземпляр карты 13 раз. Вы также меняете значение этого экземпляра 13 раз, так что в итоге вы получите Deck с 13 экземплярами одного и того же объекта карты (все они - короли):

                Card card = new Card();
                { /*...*/ } 
                for (int k = 1 ; k <=13; k++)
                {
                    card.Value = k;
                    // ... 
                    Deck.Add(card);
                }

Чтобы решить вашу проблему, вы должны создать каждую карточку внутри цикла «значения»:

           for (int c = 1; c < 5; c++)
           {
                for (int k = 1 ; k <=13; k++)
                {
                     Card card = new Card();
                     // ... Set here the Value and Suite
                 }
            }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...