Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.77/13: Рейтинг темы: голосов - 13, средняя оценка - 4.77
0 / 0 / 0
Регистрация: 27.03.2016
Сообщений: 33
1

Когда твой Random совсем не Random

20.04.2016, 11:06. Показов 2437. Ответов 21
Метки нет (Все метки)

Мой код ведет себя весьма странно. У меня есть список экземпляров класса в котором (Уж простите что я такое наделал) есть экземпляр другого класса с 4-мя переменными которые рандомятся вместе с созданием экземпляра базового класса.
Прилагаю код.
Занесение экземпляров в коллекцию.
C#
1
2
3
4
5
6
7
8
        private void CreateGenomes()
        {
            for (int i = 0; i < m_populationSize ; i++)
            {
                Genome g = new Genome();
                m_thisGeneration.Add(g);
            }
        }
Конструктор и высов метода заполнения полей для базового класса с переменными. Метод CreateGenes принимает фиктивный параметр для создания перегрузки.

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
        public Genome()
        {
            vars = new Vars();
            CreateGenes(vars);
        }
 
private void CreateGenes(Vars _vars)
        {
            
            Random r = new Random(); //В отладчике эта часть работает нормально
            vars.a = r.Next(1, 30);
            vars.b = r.Next(1, 30);
            vars.c = r.Next(1, 30);
            vars.d = r.Next(1, 30); 
        }
Класс Vars
C#
1
2
3
4
        public class Vars
        {
            public int a, b, c, d;
        }
Если я делаю это в отладчике - значения у этого самого экземпляра var разные. Только я убираю брейкпоинт и все значения становятся одинаковыми!!!! Как это обойти?
0

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
20.04.2016, 11:06
Ответы с готовыми решениями:

Random, повторы при static Random(1 seed)
Добрый вечер. Использую private static readonly Random, так как крутится в цикле и если убрать...

Что не так с 'Random' или There is no overloaded version of 'Random' that can be called with these arguments
Доброго времени суток! Я с программированием на &quot;Вы&quot;, поэтому очень прошу доходчиво объяснить, что...

У меня непонятки с методами Math.random() и Random()
Задача : заполнить массив из 15 элементов случайным образом вещественными значениями х (-5 &lt;= x &lt;=...

Random и объекты класса (pseudo random)
Всем привет. Есть класс: typedef unsigned int ui; class Player { private: ui health;

21
1449 / 842 / 150
Регистрация: 06.06.2012
Сообщений: 2,370
20.04.2016, 15:32 21
Цитата Сообщение от Storm23 Посмотреть сообщение
Только вы [ThreadStatic] где-то посеяли.
Он не посеял! Он использовал аналог ThreadLocal. Этот класс тоже выделяет по одному инстансу на поток.
1
Master of Orion
Эксперт .NET
6079 / 4935 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
20.04.2016, 16:13 22
Storm23, как верно заметили, ThreadStatic довольно специфичный атрибут, со своими косяками. Например, нельзя использовать инициализатор, т.к. он проинициализирует переменную только для одного потока. Ну и в целом с ним проблем хватает. Поэтому в .Net 4.0 добавили класс ThreadLocal - то же, что и Lazy, только еще и с разделением по потокам. Как работает атрибут - не особо интересовался, но думаю что там особая уличная магия со стороны CLR. А вот ThreadLocal предоставляет удобную обертку над ThreadStatic, чтобы не отстрелить себе ничего.
1
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
20.04.2016, 16:13

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

Переделать Math.random() в random()
public static void CompMove() { int x = (int) (Math.random() * 3), y = (int) (Math.random() *...

Random корректно работает только когда ему дают "одуматься"
Доброго времени суток! При написании тестового приложения возникла проблема : есть класс circ...

Как узнать когда приходили на твой сайт поисковики
Все привет. Ребята, как вы смотрите, когда на ваших сайтах были поисковики? Когда конкретно они...

Регистация собственного проекта в сети Что делать после того, когда твой проект готов???
Здравствуйте! Есть web-сайт(cделанный собственноручно) LAMP(Linux, Apache, PHP, MySQL) объемы...


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

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

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