powered by simpleCommunicator - 2.0.55     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Это баг или в чем фишка?
9 сообщений из 9, страница 1 из 1
Это баг или в чем фишка?
    #38744327
Belobrodsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Как побороть я знаю, но очень интересно почему так. Например вот код:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
    class MyOneClass
    {

        private double rndValue;

        public double RndValue
        {
            get { return rndValue; }
            set { rndValue = value; }
        }


        public MyOneClass()
        {
            Random rnd = new Random();
            this.rndValue = rnd.NextDouble();
        
        }


    }
    



    class Program
    {
        static void Main(string[] args)
        {
            List<MyOneClass> myList = new List<MyOneClass>();

            myList.Add(new MyOneClass());
            myList.Add(new MyOneClass());
            myList.Add(new MyOneClass());

            foreach (MyOneClass item in myList)
            {
                Console.WriteLine(item.RndValue);
            }


            Console.ReadKey();


        }
    }


Выводит каждый раз новое, НО ОДИНАКОВОЕ число у ВСЕХ объектах, например
0,502062168671778
0,502062168671778
0,502062168671778

А вот рабочий код, к примеру:

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
    class MyOneClass
    {
       

        private double rndValue;

        public double RndValue
        {
            get { return rndValue; }
            set { rndValue = value; }
        }


        public MyOneClass(Random rnd)
        {
            
            this.rndValue = rnd.NextDouble();
        
        }


    }
    



    class Program
    {
        static void Main(string[] args)
        {
            List<MyOneClass> myList = new List<MyOneClass>();

            Random myrnd = new Random();

            myList.Add(new MyOneClass(myrnd));
            myList.Add(new MyOneClass(myrnd));
            myList.Add(new MyOneClass(myrnd));

            foreach (MyOneClass item in myList)
            {
                Console.WriteLine(item.RndValue);
            }


            Console.ReadKey();


        }
    }


Выводить все индивидуально, например вот
0,446240733585433
0,15651451989846
0,935663036972127

Но меня мучает вопрос. Почему первый вариант не рабочий?
...
Рейтинг: 0 / 0
Это баг или в чем фишка?
    #38744332
Фотография Яростный Меч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BelobrodskyПочему первый вариант не рабочий?потому что "random" - не случайный.
...
Рейтинг: 0 / 0
Это баг или в чем фишка?
    #38744345
Belobrodsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Яростный Меч, как не случайный. Каждый раз при F5, случайно новое лепить число. а тут три раза объект rnd создается. Что за генетическая память и эффект "телегонии"?
...
Рейтинг: 0 / 0
Это баг или в чем фишка?
    #38744357
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Belobrodsky, а Вы MSDN пробовали читать: Random - класс ?
...
Рейтинг: 0 / 0
Это баг или в чем фишка?
    #38744359
Belobrodsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANA,
Спасибо. Прочел

Цитирую "Инициализирует новый экземпляр класса Random с помощью зависимого от времени начального значения по умолчанию"

Думаю выделенное, то что меня интересовало
...
Рейтинг: 0 / 0
Это баг или в чем фишка?
    #38744427
Arm79
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BelobrodskyskyANA,
Спасибо. Прочел

Цитирую "Инициализирует новый экземпляр класса Random с помощью зависимого от времени начального значения по умолчанию"

Думаю выделенное, то что меня интересовало

Random - это псевдослучайный датчик. И да, он зависит от времени. Проблема в том, что ВАШ код (последовательное создание нескольких датчиков) отрабатывает настолько быстро, что для Random время то одно и то же.

попробуйте так:
Код: c#
1.
2.
3.
4.
5.
6.
7.
            myList.Add(new MyOneClass());
            Thread.Sleep(1000);

            myList.Add(new MyOneClass());
            Thread.Sleep(1000);

            myList.Add(new MyOneClass());
...
Рейтинг: 0 / 0
Это баг или в чем фишка?
    #38744429
Arm79
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Arm79,

Дополнение к предыдущему ответу: если бы вы внимательно прочитали ссылку от skyANA, увидели бы следующие строки:

MSDNОднако, вследствие конечности разрешающей способности часов, использование конструктора без параметров при создании различных объектов Random в быстрой последовательности приводит к созданию генераторов случайных чисел, производящих идентичные числовые последовательности. В следующем примере показано, что два объекта Random, экземпляры которых создаются в быстрой последовательности, создают идентичные наборы случайных чисел.
...
Рейтинг: 0 / 0
Это баг или в чем фишка?
    #38744806
Belobrodsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Arm79,
Спасибо. Да не внимательно прочел - не хватило терпения!
...
Рейтинг: 0 / 0
Это баг или в чем фишка?
    #38744809
Belobrodsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Arm79,
Спасибо за Sleep. С ним работает. Думал об этом, но лень было искать где он сидит)))
...
Рейтинг: 0 / 0
9 сообщений из 9, страница 1 из 1
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Это баг или в чем фишка?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]