首页 > 解决方案 > 数组打印“随机”值的问题

问题描述

(C++) 我的代码有问题,我不知道为什么会发生这种情况。请帮忙。

(编辑)这是 GamePlay.h,我认为将来任何人都需要查看它:

#ifndef GAMEPLAY_H
#define GAMEPLAY_H
#include "Card.h"
// #include "Player.h"
#include "Sensei.h"
#include <iostream>
#include <string>
using namespace std;
class GamePlay
{
    private:

    Card playerCards[5];
    Card computerCards[5];
    int arr[3];

    public:

    GamePlay(Sensei, Player);
    int checkRoundWinner(int);
    void showCards();

};

#endif

这是我的游戏类:

#include
#include "GamePlay.h"
#include
using namespace std;

GamePlay::GamePlay(Sensei s, Player username)
{
// Card playerCards[5];
// Card computerCards[5];

//////////////////////////////////TEST
int arr[3];
for(int i = 0; i < 3; i++) //Assign test array
{
arr[i] = i*2;
}
cout << "___FIRST PRINT___" << endl;
for(int i = 0; i < 3; i++) //Print test array
{
cout << arr[i] << endl;
}
//////////////////////////////////TEST

// for(int i = 0; i < 5; i++) //Assign the arrays
// {
// playerCards[i] = s.getCards(username.getLevel(), i);
// computerCards[i] = s.getCards(username.getLevel(), i);
// }

}

int GamePlay::checkRoundWinner(int a) //Takes user chosen card...Compares card to the computer's chosen card
{
cout << "___SECOND PRINT___" << endl;
for(int i = 0; i < 3; i++) // Print test array again
{
cout << arr[i] << endl;
}

// playerCards[4].displayCard();
// int random = rand()%5;
// Card emptyCard("E",0);
// Card chosenCard = playerCards[a-1];
// cout << "Should be chosen card: ";
// playerCards[a-1].displayCard();
// cout << "Chosen card: ";
// chosenCard.displayCard();
// Card computerCard = computerCards[random];
// int chosenCardPower;
// int computerCardPower;

// if(chosenCard.getPowerLevel() != 0)
// {
// chosenCardPower = chosenCard.getPowerLevel();
// }else
// return 0; //Will have to check inside main if this 0 is returned (If the chosen card has already been used)

// while(computerCard.getElement() == "E")
// {
// random = rand()%5;
// computerCard = computerCards[random];//A random card from computerCards by using Math random function between 0-5
// }

// cout << "\nHere is your card: ";
// chosenCard.displayCard();
// cout << "\nHere is the computer's card: ";
// computerCard.displayCard();

// computerCardPower = computerCard.getPowerLevel();

// if(computerCardPower == chosenCardPower)
// {
// return 3;
// }
// else if(computerCardPower > chosenCardPower)
// {
// computerCards[random] = emptyCard;//Set that card in the computerCards array to an empty card
// return 2;
// }
// else
// {
// playerCards[a-1] = emptyCard;//Set that card in the playerCards array to an empty card
// return 1;
// }

}

这个类有它自己的函数,但我遇到的问题是,每当我尝试在构造函数之外使用它们时,似乎我的卡片数组(playerCards 和 computerCards)正在被更改。

为了测试该理论,我在构造函数中创建了一个测试数组并为其分配了变量。然后,我在构造函数中打印出整个数组。然后,我在构造函数之外(在 checkRoundWinner 方法内)再次打印出整个数组。这是打印的内容:

___FIRST PRINT___
0
2
4
___SECOND PRINT___
6
32764
27533224

在第二次打印之前,我没有对数组进行任何更改。如果你想看我的 Driver 课程,这里是:

#include
#include "Sensei.h"
#include "GamePlay.h"
#include "Player.h"
#include
#include
#include
#include
using namespace std;

int main()
{

Sensei mySensei;
Player newPlayer("Bob", "Bobb");


mySensei.welcomePlayer(newPlayer.getFirst(), newPlayer.getLast());

mySensei.readPack(); //Reads a card pack and assigns them to the arrays inside of mySensei

newPlayer.setLevel(1); //Changes the player level

//HERE IS WHEN THE PROBLEM OCCURS

GamePlay newGame(mySensei, newPlayer); //Make a new GamePlay (call the constructor)

int num = newGame.checkRoundWinner(1); //Call checkRoundWinner inside that GamePlay class and store the returned value

// if(num == 1)
// cout << "Comp wins." << endl;
// else if(num == 2)
// cout << "Player wins." << endl;
// else if(num == 3)
// cout << "TIE" << endl;
// else if(num == 0)
// cout << "CHANGE CARD" << endl;


}

感谢您的时间!

标签: c++arrays

解决方案


在构造函数内

GamePlay::GamePlay(Sensei s, Player username)
{
// Card playerCards[5];
// Card computerCards[5];

//////////////////////////////////TEST
int arr[3];
//…

声明了一个局部数组,在退出构造函数后将不再存在。

例如,成员函数checkRoundWinner不处理构造函数中声明的数组。

int GamePlay::checkRoundWinner(int a) //Takes user chosen card...Compares card to the computer's chosen card
{
cout << "___SECOND PRINT___" << endl;
for(int i = 0; i < 3; i++) // Print test array again
{
cout << arr[i] << endl;
}

如果该类具有数据成员arr,那么您应该删除本地数组的声明。

int arr[3];

从构造函数。


推荐阅读