求教c#入门经典中关于实现洗牌功能的c#代码

wyumening 2010-11-13 04:45:23
public Deck()
{
cards = new Card[52];
public void Shuffle()
{
Card[] newDeck = new Card[52];
bool[] assigned = new bool[52];
Random sourceGen = new Random();
for (int i = 0; i < 52; i++)
{

int destCard = 0;
bool foundCard = false;

while (foundCard == false)
{
destCard = sourceGen.Next(52);
Trace.WriteLine("the value is" + destCard);
if (assigned[destCard] == false)
foundCard = true;
}
assigned[destCard] = true;
newDeck[destCard] = cards[i];

}
newDeck.CopyTo(cards, 0);

}
}
Card是我自定义的一个类,这是c#入门经典(第三版)第十章的例子,我不明白的是代码的最后一行为什么不能换成cards=newDeck ,c#入门经典上给出的解释是“Shuffle方法如果使用cards=newDeck,就会用另一个对象代替cards应用的对象实例。如果其他地方的代码仍保留对原cards实例的引用,就会出问题——不会洗牌” ,这是怎么回事呀?
...全文
136 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
章泽天 2011-05-18
  • 打赏
  • 举报
回复
我也不明白
wyumening 2010-11-13
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 fengqingtao2008 的回复:]
看的不太懂,路过帮顶下!
[/Quote]

还是要谢谢你帮顶!
wyumening 2010-11-13
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 sp1234 的回复:]
其实不必太纠结,程序员不应该像个学就那样学习(除非你只是想在学校里写本书沽名钓誉)。

可以以测试为准,写任何成之前你都先想好如何写测试程序,然后才动手为了让测试能够通过而写实现程序。这样,就不必太纠结理论。
[/Quote]

多谢指点! 可能我提问不太详细吧。。。。。我不明白的是newDeck和cards都是Card类型的数组,cards=newDeck和newDeck.CopyTo(cards,0)这两句起的作用有什么不一样?这样问,是不是更好回答一些呢?如果我问的还是太笼统的话,我就只好结贴了,也省得浪费大家的宝贵时间^-^
  • 打赏
  • 举报
回复
其实不必太纠结,程序员不应该像个学就那样学习(除非你只是想在学校里写本书沽名钓誉)。

可以以测试为准,写任何成之前你都先想好如何写测试程序,然后才动手为了让测试能够通过而写实现程序。这样,就不必太纠结理论。
  • 打赏
  • 举报
回复
a与b已经不再指向同一个变量 --> a与b已经不再指向同一个对象

因此需要修改变量所指向的对象的内容,而不是把变量重新赋值。
  • 打赏
  • 举报
回复
比如说

A a= ........;
A b=a;

然后你为b变量重新赋值使得b变量指向新的对象,而a变量仍然指向原来的对象,a与b已经不再指向同一个变量。
无涯大者 2010-11-13
  • 打赏
  • 举报
回复
看的不太懂,路过帮顶下!

111,129

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Creator Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧