Модераторы: Partizan, gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> глюк рандома (( 
:(
    Опции темы
seacher
Дата 10.12.2007, 13:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 9
Регистрация: 1.5.2007
Где: Белорусь

Репутация: нет
Всего: нет



проблема в том, что в цикле не генерятся новые числа.
вот мой код:
Код

...
for (int i = 0; i < this.j; i++)
            {

                s += RandomX() + "\r\n";
            }

...
private string RandomX()
        {
            Random r = new Random();
            string x;

            amplituda = 2 * r.Next(10);
            frequency = r.Next(20);
            angle = (float)( Math.PI / ( 2 * r.Next(2) + 1 ) );

            x = amplituda.ToString() + " cos( 2pi / N *" + frequency.ToString() + "i +" + angle.ToString() + " )";

            return x;
        }



кто знает как исправить помогите, пожалуйсто
PM MAIL ICQ   Вверх
altarvic
Дата 10.12.2007, 13:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 87
Регистрация: 2.3.2007

Репутация: 1
Всего: 1



Если так?

Код

Random r = new Random();
for (int i = 0; i < this.j; i++)
            {

                s += RandomX(r) + "\r\n";
            }

...
private string RandomX(Random r)
        {
            string x;

            amplituda = 2 * r.Next(10);
            frequency = r.Next(20);
            angle = (float)( Math.PI / ( 2 * r.Next(2) + 1 ) );

            x = amplituda.ToString() + " cos( 2pi / N *" + frequency.ToString() + "i +" + angle.ToString() + " )";

            return x;
        }


Это сообщение отредактировал(а) altarvic - 10.12.2007, 13:26
PM MAIL   Вверх
Wizard_Memfis
Дата 10.12.2007, 13:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 193
Регистрация: 12.2.2007
Где: г. Донецк, Украин а

Репутация: 1
Всего: 4



Хороший пример в МСДН! smile 
Код

// Example of the Random class constructors and Random.NextDouble( ) 
// method.
using System;
using System.Threading;

public class RandomObjectDemo  
{
    // Generate random numbers from the specified Random object.
    static void RunIntNDoubleRandoms( Random randObj )
    {
        // Generate the first six random integers.
        for( int j = 0; j < 6; j++ )
            Console.Write( " {0,10} ", randObj.Next( ) );
        Console.WriteLine( );

        // Generate the first six random doubles.
        for( int j = 0; j < 6; j++ )
            Console.Write( " {0:F8} ", randObj.NextDouble( ) );
        Console.WriteLine( );
    }

    // Create a Random object with the specified seed.
    static void FixedSeedRandoms( int seed )
    {
        Console.WriteLine( 
            "\nRandom numbers from a Random object with " +
            "seed = {0}:", seed );
        Random fixRand = new Random( seed );

        RunIntNDoubleRandoms( fixRand );
    }

    // Create a random object with a timer-generated seed.
    static void AutoSeedRandoms( )
    {
        // Wait to allow the timer to advance.
        Thread.Sleep( 1 );

        Console.WriteLine( 
            "\nRandom numbers from a Random object " +
            "with an auto-generated seed:" );
        Random autoRand = new Random( );

        RunIntNDoubleRandoms( autoRand );
    }

    static void Main( )
    {    
        Console.WriteLine(
            "This example of the Random class constructors and " +
            "Random.NextDouble( ) \n" +
            "generates the following output.\n" );
        Console.WriteLine(
            "Create Random objects, and then generate and " +
            "display six integers and \nsix doubles from each.");

        FixedSeedRandoms( 123 );
        FixedSeedRandoms( 123 );

        FixedSeedRandoms( 456 );
        FixedSeedRandoms( 456 );

        AutoSeedRandoms( );
        AutoSeedRandoms( );
        AutoSeedRandoms( );
    }
}

/*
This example of the Random class constructors and Random.NextDouble( )
generates the following output.

Create Random objects, and then generate and display six integers and
six doubles from each.

Random numbers from a Random object with seed = 123:
 2114319875  1949518561  1596751841  1742987178  1586516133   103755708
 0.01700087  0.14935942  0.19470390  0.63008947  0.90976122  0.49519146

Random numbers from a Random object with seed = 123:
 2114319875  1949518561  1596751841  1742987178  1586516133   103755708
 0.01700087  0.14935942  0.19470390  0.63008947  0.90976122  0.49519146

Random numbers from a Random object with seed = 456:
 2044805024  1323311594  1087799997  1907260840   179380355   120870348
 0.21988117  0.21026556  0.39236514  0.42420498  0.24102703  0.47310170

Random numbers from a Random object with seed = 456:
 2044805024  1323311594  1087799997  1907260840   179380355   120870348
 0.21988117  0.21026556  0.39236514  0.42420498  0.24102703  0.47310170

Random numbers from a Random object with an auto-generated seed:
  380213349   127379247  1969091178  1983029819  1963098450  1648433124
 0.08824121  0.41249688  0.36445811  0.05637512  0.62702451  0.49595560

Random numbers from a Random object with an auto-generated seed:
  861793304  2133528783  1947358439   124230908   921262645  1087892791
 0.56880819  0.42934091  0.60162512  0.74388610  0.99432979  0.30310005

Random numbers from a Random object with an auto-generated seed:
 1343373259  1992194672  1925625700   412915644  2026910487   527352458
 0.04937517  0.44618494  0.83879212  0.43139707  0.36163507  0.11024451
*/




Нужно взбалтывать алгоритм
:
Код

  Random fixRand = new Random( seed );

--------------------
www.binary-studio.com
PM MAIL WWW ICQ Skype   Вверх
altarvic
Дата 10.12.2007, 13:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 87
Регистрация: 2.3.2007

Репутация: 1
Всего: 1



"Взбалтывать" не нужно. Достаточно объект Random сделать глобальным
PM MAIL   Вверх
fantast
Дата 10.12.2007, 14:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 147
Регистрация: 10.12.2006
Где: минск, столица на шей Родины

Репутация: нет
Всего: 2



Цитата(altarvic @  10.12.2007,  13:54 Найти цитируемый пост)
"Взбалтывать" не нужно. Достаточно объект Random сделать глобальным 

что ты имеешь ввиду под словом 'глобальным'?

а я видел отличный на мой взгляд пример такого типа
Код

  Random fixRand = new Random( DateTime.Now.Millisecond );


насчет взбалтывать в точку.. )
--------------------
Эпитафия: Он старался.                                   Неизвестный
PM MAIL   Вверх
Wizard_Memfis
Дата 10.12.2007, 19:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 193
Регистрация: 12.2.2007
Где: г. Донецк, Украин а

Репутация: 1
Всего: 4



Да, непонятно, что значит глобальным в шарпе!И если не делать "взбалтывание" то алгоритм всегда выдает одни и те же числа, да они будут псевдо случайными, но каждый раз при запуске - одни и теже!Классически, на сколько я знаю( как и в C++) делать это используя время!Как показал 
Цитата

fantast
 Random fixRand = new Random( DateTime.Now.Millisecond );

--------------------
www.binary-studio.com
PM MAIL WWW ICQ Skype   Вверх
seacher
Дата 10.12.2007, 22:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 9
Регистрация: 1.5.2007
Где: Белорусь

Репутация: нет
Всего: нет



altarvic, не работает так как ты предложил. пробовал сам, до этого...

fantast, спасибо. работает...
PM MAIL ICQ   Вверх
helvar
Дата 10.12.2007, 22:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 9
Регистрация: 2.4.2004

Репутация: нет
Всего: нет



Сталкивался с подобной проблемой.
В пошаговом режиме все нормально работало. В обычном прогоне числа были одинаковые.
Помог способ, когда объект типа Random не создавался каждый раз с новой итерацией, а только один раз.
т.е. либо Random - глобальный, либо функция возвращает ужу готовый массив случайных чисел.
PM MAIL   Вверх
altarvic
Дата 11.12.2007, 07:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 87
Регистрация: 2.3.2007

Репутация: 1
Всего: 1



Если смотреть рефлектором, то констуктор без параметров выглядит так:
Код

public Random() : this(Environment.TickCount)
{
}


что вобщем-то тоже самое что и вышеприведенный способ 
Код

new Random( DateTime.Now.Millisecond );



Под "глобальным" я имел в виду статическим членом класса. Синглтон

Код

public class SomeClass
{
  public static Random Rnd = new Random;
}


PM MAIL   Вверх
Wizard_Memfis
Дата 11.12.2007, 10:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 193
Регистрация: 12.2.2007
Где: г. Донецк, Украин а

Репутация: 1
Всего: 4



Цитата

Под "глобальным" я имел в виду статическим членом класса. Синглтон
    
public class SomeClass
{
  public static Random Rnd = new Random;
}

Вот теперь понятно! smile 
Алгоритм Random'а должен один раз запуститься, а потом нужно его использовать!Либо он должен каждый раз запускаться, но тогда с разной инициализацией!Это также будет выдавать вам различные числа!
--------------------
www.binary-studio.com
PM MAIL WWW ICQ Skype   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема »


 




[ Время генерации скрипта: 0.0773 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.