Как создать метод, чтобы он задавал объекту случайные свойства? Есть программа, в которой есть класс, в котором есть метод, который должен устанавливать объекту класса случайные параметры, но при применении этого метода к двум разным объектам класса результат получается один и тот же. Как изменить программу так, чтобы при каждом применении этого метода к объекту получался разный результат?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 <

21 Авг 2019 в 07:01
199 +1
0
Ответы
1

Проблема в том, что каждый раз при вызове метода 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() результаты будут разными для каждого объекта.

20 Апр 2024 в 13:09
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Гарантированные бесплатные доработки в течение 1 года
Быстрое выполнение от 2 часов
Проверка работы на плагиат
Поможем написать учебную работу
Прямой эфир