0

首先让我对我糟糕的语法和拼写表示抱歉。

我有一个 MVC3 项目,它创建了一个 Deck 并向其中添加了 52 张卡。然后我添加了一个 shuffle 函数,该函数仅在我逐步通过shuffle 方法中的循环时才起作用。

在我的类 Deck 中,我创建了一个包含 52 个 PlayingCard 对象的数组。Deck 有一个将数组复制到我的视图中显示的列表的方法,它还有一个打乱列表的方法。

不容易解释,但代码只运行一次,除非我单步执行。

我的甲板模型中的洗牌方法。

 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颗钻石

如图所示,循环仅在我单步执行时运行。我尝试了不同的循环,创建了一个新项目,将随机播放功能移至控制器,没有任何帮助。

任何人有任何想法我应该如何解决这个问题?

4

1 回答 1

1

我已经围绕这个创建了一个示例应用程序,并且移到Random rnd = new Random()循环之外给了我我期望的行为。

在我看来,它似乎只洗了一张牌的原因是因为随机生成的值与整个循环的值相同。

于 2012-10-03T16:07:43.483 回答