Как создать метод, чтобы он задавал объекту случайные свойства? Есть программа, в которой есть класс, в котором есть метод, который должен устанавливать объекту класса случайные параметры, но при применении этого метода к двум разным объектам класса результат получается один и тот же. Как изменить программу так, чтобы при каждом применении этого метода к объекту получался разный результат?spoiler#include #include using namespace std; enum Level {easy=1, hard, medium}; class alpha { private: Level level; int number; public: alpha() : level(easy), number(5) {} void gen() { srand(time(NULL)); number = rand() % 10 + 1; int levelgen = rand() % 3 + 1; switch (levelgen) { case 1: level = easy; break; case 2: level = medium; case 3: level = hard; default: break; } } void disp() { if (level == hard) cout << "level - ???? " << endl; else { cout << "level = "; switch (level) { case easy: cout << "easy" << endl; break; case medium: cout << "medium" << endl; break; default: break; } } cout << "number = " << number << endl; } }; int main() { srand(time(NULL)); alpha obj1; obj1.gen(); obj1.disp(); alpha obj2; obj2.gen(); obj1.disp(); system("pause"); }
Проблема в том, что каждый раз при вызове метода gen(), вы создаете новый seed для генератора случайных чисел srand(). Это приводит к тому, что при последующих вызовах метода gen() результаты будут одинаковыми.
Для того чтобы исправить это, вы должны установить seed для генератора случайных чисел только один раз в начале программы. Это можно сделать в функции main(). Вот обновленный код:
Проблема в том, что каждый раз при вызове метода gen(), вы создаете новый seed для генератора случайных чисел srand(). Это приводит к тому, что при последующих вызовах метода gen() результаты будут одинаковыми.
Для того чтобы исправить это, вы должны установить seed для генератора случайных чисел только один раз в начале программы. Это можно сделать в функции main(). Вот обновленный код:
#include <iostream>#include <ctime>
using namespace std;
enum Level {easy = 1, hard, medium};
class alpha
{
private:
Level level;
int number;
public:
alpha() : level(easy), number(5)
{}
void gen()
{
number = rand() % 10 + 1;
int levelgen = rand() % 3 + 1;
switch (levelgen)
{
case 1:
level = easy;
break;
case 2:
level = medium;
break;
case 3:
level = hard;
break;
default:
break;
}
}
void disp()
{
if (level == hard)
cout << "level - hard" << endl;
else
{
cout << "level = ";
switch (level)
{
case easy:
cout << "easy" << endl;
break;
case medium:
cout << "medium" << endl;
break;
default:
break;
}
}
cout << "number = " << number << endl;
}
};
int main()
{
srand(time(NULL));
alpha obj1;
obj1.gen();
obj1.disp();
alpha obj2;
obj2.gen();
obj2.disp();
system("pause");
}
Теперь seed устанавливается только один раз в начале программы, и при последующих вызовах метода gen() результаты будут разными для каждого объекта.