将列表添加到列表中

时间:2016-04-27 14:46:56

标签: c# list

我的代码按预期工作,除非我将playerHand(卡片列表)添加到playerHands列表时,它会将列表中所有以前的玩家手牌更改为当前的playerHand。

我对发生的事情的想法是,内存中只有一个玩家手持续不断更新已发牌。 playerHands列表中的项目只是指向单个playerHand。

如何创建playerHand的多个实例,以便playerHands列表中的每个项目都是唯一的?

注意:我最初的反应是使用Arrays而不是List,但据我所知,Arrays是老式的并且不赞成使用List。 解决我的问题是我的目标,但是如果对我正在采取的方向有任何想法,那么这个计划就会被接受。

using System;
using System.Collections.Generic;

namespace Blackjack
{
    class Program
    {
        static void Main()
        {
            int numOfDecks = 2;
            List<Cards> shoe = Deck.createDeck(numOfDecks);
            Deck.shuffleDeck(shoe, numOfDecks);
            Hand  playerHand  = new Hand();
            Hands playerHands = new Hands();

            //Test Hands
            //Create ten hands of dealt cards
            for (int i = 0 ; i < 10; i++)
            {               
                playerHand.clearHand();
                playerHands.addHand(playerHand);
                for (int j = 0; j < 5; j++)
                 {
                    playerHand.addCard(shoe[j]);
                    shoe.RemoveAt(0);   //delete card delt from shoe
                 }             
            }

             //Display the cards in each of the hands
             for (int i = 0; i < playerHands.hands.Count; i++)
             {
                 Console.Write("Hand {0}: Cards:  ", i);
                 for (int j = 0; j < playerHand.hand.Count; j++)
                {
                    Console.Write("{0}{1}, ", playerHands.hands[i].hand [j].rank, playerHands.hands[i].hand[j].suit);               
                }
                 Console.WriteLine();
             }
             Console.Read();
        }
    }
}

    class Hand
    {
    /////////////////////////////////////////////////////////////////////
    //Hand should contain, at a minimum:
    //  A List<> of cards that holds the individual cards delt to a player
    //  Game Number:  A game is continues until the player quits
    //  Hand Number:  Sequential hand played during a game
    //////////////////////////////////////////////////////////////////////

    public List<Cards> hand;

    public Hand()
    {
        hand = new List<Cards>();
    }

    public void addCard(Cards card)
    {
        this.hand.Add(card);
    }

    public void clearHand()
    {
       hand.Clear(); 
    }
}


class Hands
{
    public List<Hand> hands;

    public Hands()
    {
        hands = new List<Hand>();
    }

    public void addHand(Hand hand)
    {
        hands.Add(hand);
    }
}

1 个答案:

答案 0 :(得分:5)

问题非常非常简单:你没有创建足够的Hand实例。

您只需拨打一次Hand playerHand = new Hand();即可。 这意味着您只有一个Hand实例,您正在清理并在第一个for循环中反复填充。

您需要为每个手动实例调用new Hand()一次(只需编辑代码的相关部分):

        Hands playerHands = new Hands();

        //Test Hands
        //Create ten hands of dealt cards
        for (int i = 0 ; i < 10; i++)
        {               
            Hand  playerHand = new Hand();
            playerHands.addHand(playerHand);
            for (int j = 0; j < 5; j++)
             {
                playerHand.addCard(shoe[j]);
                shoe.RemoveAt(0);   //delete card delt from shoe
             }             
        }

玩得开心!