我正在尝试为一个列出一副卡片内容的项目编写一个代码,询问该人想要洗牌的次数,然后将它们洗牌.它必须使用一个方法来使用System.Random类创建两个随机整数.
这些是我的课程:
Program.cs中:
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
Deck mydeck = new Deck();
foreach (Card c in mydeck.Cards)
{
Console.WriteLine(c);
}
Console.WriteLine("How Many Times Do You Want To Shuffle?");
}
}
}
Run Code Online (Sandbox Code Playgroud)
Deck.cs:
namespace ConsoleApplication1
{
class Deck
{
Card[] cards = new Card[52];
string[] numbers = new string[] { "2", "3", "4", "5", "6", "7", "8", "9", "J", "Q", "K" };
public Deck()
{
int i = 0;
foreach(string s in numbers)
{ …Run Code Online (Sandbox Code Playgroud) 为什么以下"交换"操作会在随机时间失败?
int i,p,a[11] = {0,1,2,3,4,5,6,7,8,9,10 };
srand(time(0));
for (i=0;i<11;i++)
{
p = rand() % 11;
a[i] = a[i] ^ a[p];
a[p] = a[i] ^ a[p];
a[i] = a[i] ^ a[p];
}
Run Code Online (Sandbox Code Playgroud)
它与这个答案中的逻辑没那么不同
它将适用于3/4运行然后开始复制0
用C和C++试过,结果相同
[编辑]
通过初始化p=0和替换相关的行来解决while (p==i) p = rand() % 11;
更新:不使用 的原因xor(参见Mark Byers的回答和评论)