让我首先对我糟糕的语法和拼写说声对不起。
我有一个MVC3项目,创建一个甲板,并添加了52张卡。然后,我添加了一个洗牌函数,它只在通过循环时才能工作。
在我的类Deck中,我创建了一个包含52个PlayingCard对象的数组。Deck有一个方法,可以将Array复制到“我的视图”中显示的列表中,它还有一个对列表进行洗牌的方法。
解释起来不容易,但代码只运行一次,,除非我一步一步地完成。
我在甲板模型中的洗牌方法。
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颗心,4颗心,6颗心,6颗心,8颗心,9颗心,10颗心,12颗心,12颗红桃,1颗黑桃,12颗红桃,12颗心,6颗心,10颗心,12颗心,6颗心,12颗心,6颗心,12颗心,6颗心,8颗心,12颗心,12颗心,6颗心,8颗心,12颗心,12颗心,6颗心,10颗心,12颗心,6颗心,12颗心,12颗心,6颗心,10颗心,12颗心,6颗心,6颗心,12颗心,12颗心,6颗心,12颗心,6颗心,8颗心,8支黑俱乐部12个俱乐部13个俱乐部1颗钻石1颗钻石2颗钻石12颗钻石3颗钻石5颗钻石6颗钻石7颗钻石8颗钻石9颗钻石10颗钻石11颗钻石13颗钻石*
经过15次步骤后的输出:
2黑桃、3支黑桃、5支黑桃、3颗钻石、12颗钻石、13颗红桃、11颗红桃、1颗黑桃、5颗钻石、5颗钻石、5颗钻石、12颗红桃、12颗红桃、7支黑桃、13支黑桃、3支黑桃、3支黑桃、7支黑桃、8支黑桃、12支黑桃、12支黑桃、8颗黑桃、8颗红桃、1颗红桃、9颗红桃、9颗红桃、9颗红桃、9颗红桃、9支红桃、11支黑桃、12支黑桃、12支黑桃、12支黑桃、12支黑桃、12支黑桃、12支黑桃、12支黑桃、12支黑桃、12支黑桃、12支黑桃、12支黑桃、121颗钻石2颗钻石4颗心4颗钻石5颗心6颗钻石7颗钻石8颗钻石9颗钻石10颗钻石11颗钻石13颗钻石
执行整个循环后的输出:
10颗心、6颗心、8颗心、5颗心、5颗心、5颗钻石、5颗钻石、12颗黑桃、8颗钻石、8颗钻石、5颗钻石、8颗钻石、8颗黑桃、9颗钻石、8颗黑桃、9颗黑桃、8颗红桃、6颗黑桃、6颗黑桃、6颗黑桃、6颗黑桃、6颗黑桃、6颗黑桃、6颗黑桃、4颗黑桃、4颗黑桃、4颗黑桃、4颗黑桃、4颗黑桃、4颗黑桃、4颗钻石。心2颗钻石4颗钻石11颗钻石7颗心11颗心3颗黑桃3颗心10颗心13颗心9颗心13颗钻石
如图所示,只有当我跨过循环时,循环才会运行。我尝试了不同的循环,做了一个新的项目,移动洗牌功能到控制器,没有任何帮助。
有人知道我该怎么解决这个问题吗?
发布于 2012-10-03 16:07:43
围绕这一点,我创建了一个示例应用程序,并将Random rnd = new Random()
移到循环之外,这给了我所期望的行为。
在我看来,它只出现洗牌一张牌的原因,是因为随机生成的值是整个循环中相同的值。
https://stackoverflow.com/questions/12711845
复制相似问题