c#编程错误

来源:百度知道 编辑:UC知道 时间:2024/05/17 07:14:47
using System;
namespace Ch10CardLib
{
public class Deck
{
private Card[] cards;
public Deck()
{
cards = new Card[52];
for(int suitVal=0;suitVal<=4;suitVal++)
{
for (int rankVal = 1; rankVal <14; rankVal++)
{
cards[suitVal * 13 + rankVal - 1] = new Card((Suit)suitVal, (Rank)rankVal);

}
}
}
public Card GetCard(int cardNum)
{
if (cardNum >= 0 && cardNum <= 51)
return cards[cardNum];
else
throw (new System.ArgumentOutOfRangeException("cardNum", cardNum, "Value must be between 0 to 51."));
}
public void Shuffle()
{
Card[] newDeck = new Card[52];
bool[] assigned = new bool[52];
for (int i = 0; i < 52; i++)
{
int destCard = 0;
bool foundCard = false;
Random sourceGen = new Random();
while (foundCard == false)
{
destCard = sourceGen.Next(52);

cards[suitVal * 13 + rankVal - 1] = new Card((Suit)suitVal, (Rank)rankVal);
既然定义的长度为:cards = new Card[52]; 为何要超出范围?
改为:
cards[suitVal * 13- (rankVal - 1)] = new Card((Suit)suitVal, (Rank)rankVal); 也许你会笑,但是你如果要是把二层循环倒序进行就可以了,就实现了赋值了。
for (int rankVal = 14; rankVal>1; rankVal--)

希望是您所希望的

cards = new Card[52];
52改成64以上的数

注意数据的取值类型及范围