C++ 当计算成员的值时,向量有一个奇怪的问题
这是我最后一个问题的最新跟进: 我已经完成了排序算法,看起来效果不错。现在,我的问题是试图根据向量中的级别计算每个战斗机的健康度(在getHealth()函数中),以便正确计算 战斗机.hC++ 当计算成员的值时,向量有一个奇怪的问题,c++,algorithm,class,vector,C++,Algorithm,Class,Vector,这是我最后一个问题的最新跟进: 我已经完成了排序算法,看起来效果不错。现在,我的问题是试图根据向量中的级别计算每个战斗机的健康度(在getHealth()函数中),以便正确计算 战斗机.h #ifndef FIGHTER_H #define FIGHTER_H #include <iostream> #include <ctime> #include <string> #include <cstdlib> #include <fstream
#ifndef FIGHTER_H
#define FIGHTER_H
#include <iostream>
#include <ctime>
#include <string>
#include <cstdlib>
#include <fstream>
#include <vector>
class Fighter
{
protected:
std::vector<Fighter> x;
std::string name;
int health, level;
//int damage;
public:
int getHealth(int);
void getEnemies(/*std::vector<Fighter> &*/);
void printFighter(/*std::vector<Fighter> &*/);
void sortFighters(/*std::vector<Fighter> &*/);
//friend std::istream & operator >> (std::istream & strm, Fighter & x);
//friend std::ostream & operator << (std::ostream & strm, const Fighter & f);
//void attack();
Fighter();
~Fighter();
};
class Player : public Fighter
{
private:
int experience;
public:
int getHealth(int);
void printFighter();
void getExperience(int);
void playerAttack();
Player();
~Player();
};
//class FightPub
//{
// private:
// Player player;
// Fighter enemy;
// public:
// //void fight();
// //void getStats();
//};
#endif
#如果没有战斗机#
#定义战斗机
#包括
#包括
#包括
#包括
#包括
#包括
职业拳击手
{
受保护的:
std::向量x;
std::字符串名;
智力健康水平;
//智力损伤;
公众:
国际卫生组织;
void getknowers(/*std::vector&*/);
void printFighter(/*std::vector&*/);
无效排序权(/*std::vector&*/);
//friend std::istream&operator>>(std::istream&strm,Fighter&x);
//friend std::ostream&operator>line;
y、 名称=行;
输入文件>>行;
y、 level=atoi(line.c_str());
输入文件>>行;
y、 健康=获得健康(y级);
x、 向后推(y);
输入文件>>行;
}而(行!=”);
}
}
inputFile.close();
}
}
#布拉格端区
#布拉格马地区卫生
int Fighter::getHealth(int lv)//主要问题
{
如果(lv>=6)
{
//std::cout health=lv*2;
性病::妇科健康1)
{
对于(inti=1;ihealth+=2;}
我不知道你想要什么,我能做的就是读代码
看起来在6级以下,战士会获得额外的(2-2级)生命值。在6级或6级以上,战士会获得精确的(2级)生命值
但是运行状况分配在很多地方,并且它不是从0开始的,所以我不打算尝试计算发生了什么。尝试组织一些事情,这样计算就不会分散到整个程序中
int Fighter::getHealth(int lv) //The main problem
{
if(lv >= 6)
{
//std::cout << "\nHealth Bonus!";
this->health = lv * 2;
std::cout << this->health << std::endl;
}
else if (lv > 1)
{
for (int i=1; i<lv; i++)
{this->health += 2;}
std::cout << this->health << std::endl;
}
return health;
}
int-Fighter::getHealth(int-lv)//主要问题
{
如果(lv>=6)
{
//std::cout health=lv*2;
性病::妇科健康1)
{
对于(inti=1;ihealth+=2;}
std::cout health问题在于这里的+=
else if (lv > 1)
{
for (int i=1; i<lv; i++)
{this->health += 2;}
std::cout << this->health << std::endl;
}
在for()循环的正上方。“正确计算”这意味着什么?不要发布你的整个项目并要求人们调试你的代码,而是把输入、预期的输出、所获得的输出、以及你认为是相关代码的一部分进行说明。t除了通过它读取的文件之外。我当前获得的输出是(忽略与程序无关的任何内容):姓名:fdhjje等级:1健康:216姓名:Gererweq等级:2健康:200姓名:dnbq等级:3健康:204姓名:hrbsrx等级:4健康:210姓名:火焰等级:4健康:216姓名:铁托等级:5健康:18姓名:hrbsrx等级:6健康:12姓名:Cthulu等级:99健康:198好问题。在等级1,战斗机的健康从10开始,对于ea来说ch级别在6之前,生命值增加2。如果级别为6或更高,则生命值等于级别的两倍。这使得级别6(生命值=12)可能比级别5(生命值=18)更容易。无论如何,与运行状况初始化相关的所有内容都应包含在一个函数中,并且该函数应被调用为set\u initial\u health
。如果级别已经是对象的属性,则它不应将级别作为参数。它应分配运行状况
,而不是返回值。总体而言,代码有很多错误。从一个新的文件并重新实现所有内容,使用复制粘贴来重新组织旧代码。它不会像你想的那么久,除了解决明显的、必要的错误的过程之外。无论如何,你抓住了它!我可以想出两个更好的解决方案,不过:不要使用temp
对象,也不要执行加法乘法是的,有很多更好的方法来修复这段代码…它真正需要的是高层次的重构和重构。
#include "Fighter.h"
int main()
{
unsigned seed = time(0);
srand(seed);
/*std::vector<Fighter> baddie;*/
Fighter * enemy = new Fighter;
Player * me = new Player;
enemy->getEnemies(/*baddie*/);
enemy->sortFighters(/*baddie*/);
enemy->printFighter(/*baddie*/);
me->printFighter();
delete enemy;
delete me;
return 0;
}
int Fighter::getHealth(int lv) //The main problem
{
if(lv >= 6)
{
//std::cout << "\nHealth Bonus!";
this->health = lv * 2;
std::cout << this->health << std::endl;
}
else if (lv > 1)
{
for (int i=1; i<lv; i++)
{this->health += 2;}
std::cout << this->health << std::endl;
}
return health;
}
else if (lv > 1)
{
for (int i=1; i<lv; i++)
{this->health += 2;}
std::cout << this->health << std::endl;
}
<fighter>
Cthulu
99
</fighter>
<fighter>
Gererweq
2
</fighter>
this->health = 10;