【发布时间】:2012-10-03 15:33:40
【问题描述】:
首先让我对我糟糕的语法和拼写表示抱歉。
我有一个 MVC3 项目,它创建了一个 Deck 并向其中添加了 52 张卡片。 然后我添加了一个 shuffle 函数,该函数仅在 我单步执行 shuffle 方法中的循环时才起作用。
在我的类 Deck 中,我创建了一个包含 52 个 PlayingCard 对象的数组。 Deck 有一种方法可以将数组复制到我的视图中显示的列表中, 它还有一个打乱列表的方法。
不容易解释,但代码只运行一次,除非我单步执行。
我的 Deck 模型中的 shuffle 方法。
public void Shuffle()
{
for (int i = 0; i < 51; i++)
{
PlayingCard temp;
temp = myDeck[i];
Random rnd = new Random();
int randomNr = rnd.Next(51);
myDeck[i] = myDeck[randomNr];
myDeck[randomNr] = temp;
}
}
随机播放后的输出,不单步执行:
*4 颗钻石 1 颗心 2颗心 3颗心 4颗心 5颗心 6颗心 7颗心 8颗心 9颗心 10颗心 11颗心 12颗心 13颗心 1 黑桃 2 黑桃 3 黑桃 4 黑桃 5 黑桃 6 黑桃 7 黑桃 8 黑桃 9 黑桃 10 黑桃 11 黑桃 12 黑桃 13 黑桃 1 俱乐部 2个俱乐部 3个俱乐部 4个俱乐部 5个俱乐部 6个俱乐部 7个俱乐部 8个俱乐部 9个俱乐部 10个俱乐部 11个俱乐部 12个俱乐部 13个俱乐部 1 颗钻石 2 颗钻石 12 颗钻石 3 颗钻石 5颗钻石 6颗钻石 7颗钻石 8颗钻石 9颗钻石 10颗钻石 11颗钻石 13 颗钻石 *
单步执行 15 次后的输出:
2 黑桃 3个俱乐部 5 黑桃 3 颗钻石 12颗钻石 13颗心 11颗心 1 黑桃 6个俱乐部 5颗钻石 1 俱乐部 12颗心 7个俱乐部 13 黑桃 2个俱乐部 10颗心 3 黑桃 4 黑桃 3颗心 6 黑桃 7 黑桃 8 黑桃 9 黑桃 10 黑桃 11 黑桃 12 黑桃 8颗心 7颗心 1 颗心 2颗心 4个俱乐部 5个俱乐部 9颗心 6颗心 8个俱乐部 9个俱乐部 10个俱乐部 11个俱乐部 12个俱乐部 13个俱乐部 1 颗钻石 2 颗钻石 4颗心 4 颗钻石 5颗心 6颗钻石 7颗钻石 8颗钻石 9颗钻石 10颗钻石 11颗钻石 13 颗钻石
单步执行整个循环后的输出:
10 颗心 6个俱乐部 8颗心 5颗心 5个俱乐部 7颗钻石 5 黑桃 11颗钻石 12 黑桃 12个俱乐部 8颗钻石 5颗钻石 1 俱乐部 9 黑桃 10颗钻石 12颗心 8 黑桃 9个俱乐部 13个俱乐部 6颗心 1 黑桃 11 黑桃 1 颗心 12颗钻石 4个俱乐部 3个俱乐部 8个俱乐部 9颗钻石 7个俱乐部 2个俱乐部 3 颗钻石 1 颗钻石 7 黑桃 10 黑桃 2颗心 6 黑桃 13 黑桃 4 黑桃 2 黑桃 6颗钻石 4颗心 2 颗钻石 4 颗钻石 11个俱乐部 7颗心 11颗心 3 黑桃 3颗心 10个俱乐部 13颗心 9颗心 13 颗钻石
如图所示,循环仅在我单步执行时运行。 我尝试了不同的循环,创建了一个新项目,将随机播放功能移至控制器,没有任何帮助。
有人知道我应该如何解决这个问题吗?
【问题讨论】:
-
即使不阅读大部分内容,您将在循环内使用
Random类遇到问题,将其移出循环(如初始化一次),然后调用Next循环内。如果你在一个紧密的循环中初始化它,随机种子可以和以前一样,因此它看起来不是“随机的”。 -
检查内存操作是否没有对循环迭代器做一些奇怪的事情。
Console.Write它的价值 -
“首先让我为我糟糕的语法和拼写道歉。”哦,拜托,如果你和我们中的一些人一样在这里待了足够长的时间,你的拼写和语法实际上是一种祝福。
-
当你说“代码只运行一次”时,这是基于你观察到的吗?在循环中粘贴一个 Debug.WriteLine 并密切关注您的输出窗口。
-
@Adam 代码运行通过,如调试输出所示,但仍然没有超过第一个索引。
标签: c# asp.net-mvc-3 visual-studio-2010 playing-cards