C ++使用构造函数随机化不同的变量

时间:2016-12-12 19:57:15

标签: c++ class object constructor srand

Robot::Robot()

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循环,每次我构造一个新的类实例时,对象都会输出完全相同的数据。在构造类的对象时,如何正确使用随机函数函数将不同的数据转换为变量?我尝试做研究,但它让我到了这一点,我不确定为什么这不起作用。先谢谢你。

1 个答案:

答案 0 :(得分:0)

很可能你生产的物体太快了。如果time()方法在每次调用构造函数时产生相同的值,则会产生相同的“随机”值。

如果您在程序启动srand上只调用rand()一次,则会为每个对象生成不同的值。