gpt4 book ai didi

c++ - 为什么我的输出在到达代码的这一部分时卡住了?

转载 作者:行者123 更新时间:2023-11-28 04:11:06 26 4
gpt4 key购买 nike

我正在尝试比较两副纸牌,但每次我尝试另一种方法时,我都会得到相同的结果......代码输出之前的所有内容,一旦遇到比较就会卡住代码,就好像它陷入了无限循环。

我尝试过 for 循环、静态变量、do-while 循环等。这是我第一次在客户端代码处离开循环。

据说会使程序陷入无限循环的代码。

    while (repeatLoop == false)
{
deck1.shuffleDeck();
counter++;
repeatLoop = deck1.compareDecks();
}

compareDecks 函数。

bool deck::compareDecks()
{
int deckCount = 0;

suitType tempOriginalSuit;
suitType tempShuffleSuit;

rankType tempOriginalRank;
rankType tempShuffleRank;

while (index < 52)
{
tempOriginalSuit = originalCardDeck[index].getSuit();
tempShuffleSuit = shuffledCardDeck[index].getSuit();

if (int(tempOriginalSuit) == int(tempShuffleSuit))
{
tempOriginalRank = originalCardDeck[index].getRank();
tempShuffleRank = shuffledCardDeck[index].getRank();

if (int(tempOriginalRank) == int(tempShuffleRank))
{
deckCount++;

if (deckCount == 52)
return true;
}
}
else
{
return false;
index++;
}
}
}

shuffleDeck 函数(此功能将牌组前半部分的第一张牌和牌组后半部分的第一张牌推回末端,直到所有 52 张牌都按此模式插入。这使得牌组有 52 x 2 张牌(牌组的后半部分是完美的洗牌),所以我使用 .erase 删除了前半部分卡片,因为不需要)

void deck::shuffleDeck()
{
for (int a = 0, b = 2; a < 2 && b < 4; a++, b++)
{
for (int i = 2; i < 15; i++)
{
shuffledCardDeck.push_back(card{ static_cast<cardSpace::suitType>(a),
static_cast<cardSpace::rankType>(i) });

shuffledCardDeck.push_back(card{ static_cast<cardSpace::suitType>(b),
static_cast<cardSpace::rankType>(i) });
}
}

shuffledCardDeck.erase(shuffledCardDeck.begin(),
shuffledCardDeck.begin() + (shuffledCardDeck.size() / 2));
}

由这个构造函数初始化的两副牌。

deck::deck()
{
for (int i = 0; i < 4; i++)
{
for (int j = 2; j < 15; j++)
{
originalCardDeck.push_back(card{ static_cast<cardSpace::suitType>(i),
static_cast<cardSpace::rankType>(j) });
shuffledCardDeck.push_back(card{ static_cast<cardSpace::suitType>(i),
static_cast<cardSpace::rankType>(j) });
}
}

}

另请注意,我在另一个函数中对 shuffledCardDeck vector 进行了完美洗牌。我正在尝试重复 perfectShuffle 函数,直到它达到其原始状态并输出执行此操作所需的次数。

我得到一个无限循环。

编辑:我决定添加 return false;将 compareDecks 函数中的语句放入 if-else。另外,我认为导致问题的原因是我的索引 i 每次再次调用时都会重置为零。你们有什么解决方案可以提出吗?我试过使用静态变量,但它们不会在 for 循环中递增。

编辑 2:根据用户的要求,我将 if 语句括在花括号中,因为这是我代码中的一个缺陷。

编辑 3:注释掉之后

deck1.shuffleDeck()

compareDecks 函数返回 true,表明牌组相等,这是不应该发生的...这导致循环仅在一个循环后结束。

最佳答案

我期待你真的洗牌。

您的代码将一张特定的、新合成的卡片推到牌组的末端:

           shuffledCardDeck.push_back(card{ static_cast<cardSpace::suitType>(a),
static_cast<cardSpace::rankType>(i) });

例如,它推出的第一张牌始终是 0 中的 2(无论第 0 花色是什么)。那不是你想要的。您实际上想要将位于牌组中特定位置 index 的卡片拷贝推送。例如,从 025 循环 index,然后推送 shuffledCardDeck[index]shuffledCardDeck[ 26 + 索引].

然后您仍然可以使用删除甲板前半部分的技术来结束。

void deck::shuffleDeck()
{
for (int index = 0; index < 26; ++index) {
shuffledCardDeck.push_back(shuffledCardDeck[index]);
shuffledCardDeck.push_back(shuffledCardDeck[26 + index]);
}

shuffledCardDeck.erase(shuffledCardDeck.begin(),
shuffledCardDeck.begin() + 52);
}

关于c++ - 为什么我的输出在到达代码的这一部分时卡住了?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57776778/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com