我试图混合数组顺序,而不会丢失任何内容。这是一副纸牌,我想把它混合起来。
我有多个文件用于沟通,这就是问题所在:
class Deck{
private:
PlayingCard deck[52];
public:
Deck();
void shuffle();
double draw();
void printDeck();
};
然后我创建了一个甲板的实例,我能够正确地打印整个甲板,我只是想把它混合起来:
void Deck::shuffle(){
int randNum;
string tmp;
srand(time(NULL));
for(int i = 0; i < 52; i++){
randNum = rand()%52;
deck[i] = deck[randNum];
}
}
所以我知道我正在分配一个随机数,没有什么能阻止它获得两次相同的随机数。我不确定是否有另一种方法可以调用一个随机数而不会得到它两次,或者是否有另一种方法我应该调用。因为我怎么把它混合在一起但它不能打印同一张卡两次,这是不可能的。
答案 0 :(得分:0)
deck[i] = deck[randNum];
这会产生不正确的行为,因为你正在制作第二副牌[randNum](只要randNum!= i)
如果你想交换两个号码,你可以做
PlayingCard tmp = deck[i];
deck[i] = deck[randNum];
deck[randNum] = tmp;
或者
std::swap(deck[i], deck[randNum);
或者正如Igor Tandetnik指出的那样,你可以使用std :: shuffle而不是整个循环。