c# - 将对象列表划分为子列表而不创建其他对象
问题描述
我正试图在中断后摆脱编码锈迹,因此承担了创建简单纸牌游戏的任务。我知道我犯了一个菜鸟错误,但我似乎找不到解决方案。
我正在尝试实现一些概念性的洗牌方法,其中一种涉及将牌组清空到许多单独的堆栈中,然后再次重新编译到牌组中。
我的deck
是一个标准List<T>
。我的目标是从Cards
中取出一张顶牌并将其添加到堆/堆叠中,从而将其从. 然后将最上面的卡片添加到堆/堆叠中,然后,直到没有更多卡片。然后我可以继续操作 3 堆并将它们添加回最后的甲板。[0]
'temp_deck'
x
temp_deck
y
z
temp_deck
我的问题是,由于某种原因,它把每一堆都加card
进去temp_deck
了,所以每堆x, y, z
都有 52 张牌。我该如何解决这个问题,以便将我的列表划分为这些堆而不是相乘?
这是我当前(第 n 次)尝试划分列表:
public void Shuffle_b(Deck deck)
{
Deck temp_deck = deck;
Deck x = new Deck();
x.Cards.Clear();
Deck y = x;
Deck z = y;
while (temp_deck.Cards.Count !=0)
{
if (temp_deck.Cards.Count != 0)
{
x.Cards.Add(temp_deck.Cards[0]);
temp_deck.Cards.Remove(temp_deck.Cards[0]);
if (temp_deck.Cards.Count != 0)
{
y.Cards.Add(temp_deck.Cards[0]);
temp_deck.Cards.Remove(temp_deck.Cards[0]);
if (temp_deck.Cards.Count != 0)
{
z.Cards.Add(temp_deck.Cards[0]);
temp_deck.Cards.Remove(temp_deck.Cards[0]);
}
}
}
}
}
解决方案
您的问题是您将甲板 y 和 z 设置为指向您曾经创建的同一个对象 x。更改行:
Deck y = x;
Deck z = y;
至
Deck y = new Deck();
Deck z = new Deck();
您应该了解 x, y, z 是对对象的引用,并且当您分配 y = x 时,您将 y 指向 x 所指向的同一事物。
推荐阅读
- python - 部分填充 PIL ImageDraw Line
- woocommerce - woocommerce 第三方运输方式
- nuget - 使用 jfrog-cli 递归下载 nuget 包及其依赖项
- docker - 连接到上游 [Mastodon] 时,nginx connect() 失败(111:连接被拒绝)
- python - 可以使训练有素的 ANN(张量流)模型可预测吗?
- elasticsearch - Elasticsearch 放置角色 API
- ruby-on-rails - Rails Active Record Query - 向项目创建者/成员显示项目
- r - 基于其他列在 R 中添加新列
- reactjs - 在 React SSR 的组件之外检索 url 参数
- android - Google Play 控制台无用的错误消息