【发布时间】:2017-04-27 18:33:43
【问题描述】:
机器人::机器人()
fitness = 5;
totalBattery = 5;
int randNum;
int i = 0;
bool valid = true;
srand(time(NULL));
//get robot's position on board and check to see if it is not starting on the wall
while (valid)
{
position = (rand()+i++) % 196;
if (position >= 0 && position <= 14)
{ }
else if ((position % 14) == 0 || (position % 14) == 13)
{ }
else if (position >= 183 && position <= 195)
{ }
else
{
valid = false;
cout << endl << "MY POSITION IS : " << position << endl << endl;
}
}
//randomize Robot Genetics
for (int j = 0; j < genes; j++)
{
for (int k = 0; k < chromosomes; k++)
{
//first 4; set N S E W(what the robot looks for in that direction)
//0 = empty; 1 = battery; 2 = don't care; 3 = wall
if (k < 4)
{
randNum = ((rand()+i++) % 4);
switch(randNum)
{
//Empty Space
case 0:
DNA[j][k] = " * ";
break;
//Battery
case 1:
DNA[j][k] = " B ";
break;
//Don't Care
case 2:
DNA[j][k] = " D ";
break;
//Wall
case 3:
DNA[j][k] = " W ";
break;
default:
cout << "YOUR CODE SCREWED UP IF YOU ARE IN HERE!! " << endl;
}
}
//direction facing; N S E W
else if (k < 5)
{
randNum = ((rand()+i++) % 4);
switch(randNum)
{
case 0:
DNA[j][k] = "N";
break;
case 1:
DNA[j][k] = "S";
break;
case 2:
DNA[j][k] = "E";
break;
case 3:
DNA[j][k] = "W";
break;
default:
cout << "YOUR CODE SCREWED UP IF YOU ARE IN HERE!! " << endl;
break;
}
}
//step counter in that direction
else if (k < 6)
{
DNA[j][k] = "0";
}
//Rotate Right(R); Rotate Left(L); Move in facing Direction(M); Do Nothing (X)
else
{
randNum = ((rand()+i++) % 4);
switch(randNum)
{
case 0:
DNA[j][k] = "X";
break;
case 1:
DNA[j][k] = "L";
break;
case 2:
DNA[j][k] = "R";
break;
case 3:
DNA[j][k] = "M";
break;
default:
cout << "YOUR CODE SCREWED UP IF YOU ARE IN HERE!! " << endl;
break;
}
}
}
}
}
我正在尝试构造一个类的对象,我需要 200 个。我正在使用一个向量并遍历一个while循环,每次我构造一个新的类实例时,对象都会得到完全相同的数据。在构造类的对象时,您应该如何正确使用 randomizer 函数将不同的数据转换为变量?我尝试进行研究,但它只是让我到了这一点,我不确定为什么这不起作用。提前谢谢你。
【问题讨论】:
-
为不可能的事情添加默认情况真的很荒谬。如果您以某种方式将值 mod 4 设为 >3,则您的计算机已损坏。这不是代码问题。
-
@tadman:保护自己免受未来可能产生意外后果的代码更改的影响是很常见的。此外,虽然表达式
n % 4(假设这里是内置类型)不能产生大于 3 的值,但它肯定可以产生小于 0 的值。 -
@BenjaminLindley 这是最糟糕的防御性编程形式。如果发生这种情况真的很糟糕,
abort()。
标签: c++ class object constructor srand