c++ - 数组打印“随机”值的问题
问题描述
(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;
}
感谢您的时间!
解决方案
在构造函数内
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];
从构造函数。
推荐阅读
- php - 在使用 Php 之间使用冒号 (:) 访问变量的 Json 值
- uwp - 在 C++/WinRT 项目中使用 CoreDispatcher::RunAsync 时获取“在定义之前无法使用返回‘auto’的函数”
- php - PHP将此时间戳转换为纪元/unix时间(int)
- c - 通过调用无意返回的函数来退出 switch 语句是一种好的编码习惯吗
- mysql - 触发器检查两个表上的多个值是否相等,然后更新表
- c# - 如何在 xamarin 表单中创建具有两种布局的页面
- c++ - 在 C++ 中使用取决于函数的大小初始化数组
- sql - 将数据从一个表迁移到另一个表
- java - 信件计数应用程序
- mongodb - 使用 mongodb 和 kafka 消费者的并发更新问题