我很茫然,并试图将所有内容移入和移出循环。我滚动20次,打印阵列时只显示一个卷。我错过了什么或做错了什么?另外,我如何缩短if
和else if
语句,以便在aDie cpp中不那么多余?
解决方案是在构造函数中声明我的数组,工作代码如下所示。
头文件aDie.h
#define aDie_H
class aDie {
public:
aDie();
void numRolls();
void getSeed();
void roll();
void rolls();
void array();
void Print();
private:
int Rolls;
int dSeed;
int die1;
int die2;
int sum;
int DieFace[6];
int i = 0;
};
Cpp文件aDie.cpp
#include "aDie.h"
#include <iostream>
#include <ctime>
using namespace std;
aDie::aDie() { //constructor sets values to default 0
die1 = 0;
die2 = 0;
dSeed = 0;
DieFace[0] = 0; //declare array
DieFace[1] = 0;
DieFace[2] = 0;
DieFace[3] = 0;
DieFace[4] = 0;
DieFace[5] = 0;
}
void aDie::numRolls() {
cout << "Enter number of times for die to be rolled: ";
cin >> Rolls;
return;
}
void aDie::getSeed() { //gets seed
cout << "Enter desired seed number: ";
cin >> dSeed;
srand(dSeed);
return;
}
void aDie::roll() { //rng for one die
die1 = 1 + rand() % 6;
}
void aDie::array() {
DieFace[die1 - 1] = DieFace[die1 - 1] + 1;
}
void aDie::Print() {
for (i = 0; i < 6; i++) { //loop to display dieFace[i] frequency
cout << i + 1 << " Was Rolled: " << DieFace[i] << " Times." << endl;
}
}
Main.cpp的
#include <iostream>
using namespace std;
#include "aDie.h"
void game1();
int main(){
game1();
system("Pause");
}
void game1(){
int i = 0;
int Rolls = 0;
cout << "Enter number of times for die to be rolled: ";
cin >> Rolls;
aDie Roll1; //calls default constructor
Roll1.getSeed(); //calls seed
for (i = 0; i < Rolls; i++) {
Roll1.roll(); //rolls die
Roll1.array();
}
Roll1.Print();
}
答案 0 :(得分:1)
在这部分:
void aDie::array() {
DieFace[0] = 0; //declare array
DieFace[1] = 0;
DieFace[2] = 0;
DieFace[3] = 0;
DieFace[4] = 0;
DieFace[5] = 0;
if (die1 == 1)
DieFace[0] = DieFace[0] + 1;
else if (die1 == 2)
DieFace[1] = DieFace[1] + 1;
else if (die1 == 3)
DieFace[2] = DieFace[2] + 1;
else if (die1 == 4)
DieFace[3] = DieFace[3] + 1;
else if (die1 == 5)
DieFace[4] = DieFace[4] + 1;
else if (die1 == 6)
DieFace[5] = DieFace[5] + 1;
}
在调用数组时,再次将数组中的每个值归零。因此,当你在循环之后调用print时,只有最后一次滚动仍然在数组中时,这个滚动并调用aDie::array()
的次数很少。