我的要求如下:
int Deal(int,CardSet&,CardSet&)
将两只手分成两手CardSet
争论通过了。
每手牌的数量是第一个参数。应一次从当前组中取出一张牌,将牌置于交替手中。
例如。如果当前集合保持2S, 3S, 4S, 5S, 6S, 7S
(整数0到5)我们必须发3张牌,然后两只手会得到2S, 4S, 6S
(整数 0、2、4)和3S, 5S, 7S
分别为 (1, 3,5)。
两只手可能已经有牌了,额外的牌将需要新的内存。创建新内存的频率不要超过需要的频率。
请记住,当前集的大小也必须减小。如果当前集合中没有足够的牌来执行交易,则打印错误
消息并终止。
我不知道我的错误是什么Deal()
功能。程序运行没有任何错误,但我得到的输出是错误的:请帮助我纠正我的错误(如果有)。
我的类对象定义在main()
are:
CardSet CardSet1(104), CardSet2(12), CardSet3, CardSet4, CardSet5, CardSet6;
cout << "Dealing 3 Cards from CardSet1 into CardSet3 and CardSet4: " <<endl;
CardSet1.Deal(3,CardSet3,CardSet4);
cout << "Printout of CardSet1:" << endl;
CardSet1.Print();
cout << "Printout of CardSet3:" << endl;
CardSet3.Print();
cout << "Printout of CardSet4:" << endl;
CardSet4.Print();
cout << endl;
这是班级:
class CardSet
{
public:
CardSet();
CardSet(int);
~CardSet();
int Size() const;
bool IsEmpty() const;
void Shuffle();
int Deal();
void Deal(int,CardSet&,CardSet&);
void Deal(int,CardSet&,CardSet&,CardSet&,CardSet&);
void AddCard(int);
void MergeShuffle(CardSet&);
void Print() const;
private:
int* Card;
int nCards;
void PrintCard(int c) const;
};
这是我必须使用的功能:
CardSet::CardSet()
{
Card = NULL;
nCards =0;
}
CardSet::CardSet(int crd)
{
int nCard;
Card = new int[crd];
nCards=crd;
for(int i=0; i<nCards; i++)
{
Card[i]=i%52;
}
}
CardSet::~CardSet()
{
delete [] Card;
}
int CardSet::Size() const
{
return nCards ;
}
void CardSet::Shuffle()
{
int shuffle, tmp;
for (int i=0; i<nCards-1; i++)
{
shuffle = rand() % 52;
tmp = Card[i];
Card[i]=Card[shuffle];
Card[shuffle]= tmp;
}
}
int CardSet::Deal()
{
int a;
a = Card[0];
return a; // return Card[0]
int *newSet = NULL;
newSet = new int[nCards];
if(nCards==0)
{
cerr << "The set is empty ." << endl;
exit(1);
}
else
{
for(int i =0; i<nCards; i--)
{
newSet[i] = Card[i+1];
}
delete [] Card;
}
}
void CardSet::Deal(int ncard, CardSet& crdHand1, CardSet& crdHand2 )
{
int a;
a =nCards/3;
for(int i=0; i<a; i++)
{
for(int j=0; j<ncard; j++)
{
if(nCards==0)
{
cerr << "No more Cards. " <<endl;
exit(1);
}
else if(i%2==0)
{
crdHand1 = Card[i];
}
else if(i%2==1)
{
crdHand2 = Card[i];
}
}
}
}
这是输出:
当我实现 crdHand1 或 crdHand2 时。输出应该是这样的
for CardSet1:
2S 4S 6S 8S XS
QS AS 3C 5C 7C
.....
for CardSet4:
3S 5S 7S 9S JS
KS 2C 4C 6C 8C
......
and so on until cards are finished