Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.92/13: Рейтинг темы: голосов - 13, средняя оценка - 4.92
15 / 15 / 4
Регистрация: 17.06.2012
Сообщений: 274
1

Random и объекты класса (pseudo random)

04.06.2015, 13:37. Просмотров 2405. Ответов 2
Метки нет (Все метки)


Всем привет.

Есть класс:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
typedef unsigned int ui;
 
class Player
{
private:
    ui health;
    ui mentalHealth;
public:
    Player();
    ui getHealth() const;
    bool changeHealth(ui);
    ui getMentalHealth() const;
    bool changeMentalHealth(ui);
};
Есть описание конструктора по умолчанию:
C++
1
2
3
4
5
6
7
Player::Player()
{
    srand(time(NULL));
 
    this->health = (rand() % 6 + 1) + 4;
    this->mentalHealth = (rand() % 6 + 1) + 4;
}
Я создаю массив объектов класса Player и хочу, чтобы у каждого объекта было рандомное значение health и mental health:

C++
1
Player team[4];
Но, у всех объектов эти поля имеют одно и тоже значение, рандомное каждый раз, но у всех одинаковое.

Что я делаю не так?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
04.06.2015, 13:37
Ответы с готовыми решениями:

random
Доброго времени суток! Вопрос прост: для генерации случайных чисел всегда пользовался rand(), но...

Random
Здравствуйте. Столкнулся с таким: если использую такой код for (int j = 0; j < COLOUMNS; j++)...

Random
Помогите,пожалуйста, подкорректировать текст проги так,что был массив задавался рандомно,а не...

random
R=random(101)/100.; Это генератор случайных чисел (0;1)?

2
:)
Эксперт С++
4765 / 3259 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
04.06.2015, 14:04 2
Цитата Сообщение от Leonman Посмотреть сообщение
Что я делаю не так?
Вынеси
C++
1
srand(time(NULL));
из конструктора или добавь сюда, например, номер создаваемого экземпляра. Иначе все элементы создаются с одинаковым seed и как следствие rand() возвращает одинаковые последовательности.
Чисто формально даже в текущем варианте ты можешь получить разные значения, если время, возвращаемое time(NULL) переместится на секунду в процессе создания очередного элемента массива.
1
15 / 15 / 4
Регистрация: 17.06.2012
Сообщений: 274
04.06.2015, 14:16  [ТС] 3
Tulosba, А куда мне вынести srand(time(NULL))? если я выношу его в глобальное поле(не уверен, что это так называется), то он выдает ошибку
C++
1
error: expected constructor, destructor, or type conversion before '(' token|
Добавлено через 3 минуты
Tulosba, А, все, понял. Нужно было просто удалить эту строчку.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
04.06.2015, 14:16

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь или здесь.

Random
для чего пишем srand(time(0)); ? srand(time(0)); int a = rand() % N;

random
Нужно сгенерировать случайное число двух значное как это сделать ? Visual C++ Гуглил но только...

Random
Всем привет! Столкнулся с проблемой: по программе должен нажать S, и после этого из списка 1.cpp...

Работа с random
Доброго времени суток! У меня есть массив int a={10,20,30,40,50}. Можно сделать так, чтобы...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.