Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.98/65: Рейтинг темы: голосов - 65, средняя оценка - 4.98
0 / 0 / 0
Регистрация: 31.05.2011
Сообщений: 7
1

Random в цикле дает одно значение

03.03.2012, 22:20. Показов 11762. Ответов 17
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
C#
1
2
3
4
5
6
7
Random RandomNum = new Random();
 
while (i < 50)
            {
                X[i] = RandomNum.Next(1,999);
                i++;
            }
Выдает одно и то же значение во всех элементах массива.
Как сделать, чтобы они были разными?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
03.03.2012, 22:20
Ответы с готовыми решениями:

Обьекты Random выдают одно и тоже значение
Написал кодик и получил интересное и необычное для меня явление!Три разных объекта класса Random...

Random в цикле
Можно ли сделать так, чтобы переменная enemydmg в цикле постоянно менялась, а не оставалась...

Random всегда выводит одно и то же число
Всем пт! У меня следующая проблема: Данный код выводит всегда одно и то же число, хотя, по...

Генерация ряда чисел используя random в цикле
Добрый день. Задача такая, нужно найти ряд цифр, например 1, 2, 3, 4, 5 при генерации случайных...

17
Эксперт .NET
17685 / 12871 / 3365
Регистрация: 17.09.2011
Сообщений: 21,136
03.03.2012, 22:23 2
Чего-то вы темните. Выложите полный код метода.
0
Эксперт .NET
4432 / 2092 / 404
Регистрация: 27.03.2010
Сообщений: 5,657
Записей в блоге: 1
03.03.2012, 22:59 3

Не по теме:

Отличный пример, где не нужен while, а нужен for.

По идее не должно быть одно число судя по коду.
0
Заблокирован
03.03.2012, 23:00 4
бог знает как он массив проверяет, каковы на старте i и массив
0
Эксперт .NET
4432 / 2092 / 404
Регистрация: 27.03.2010
Сообщений: 5,657
Записей в блоге: 1
03.03.2012, 23:01 5
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
using System;
 
namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            int[] x = new int[50];
            Random random = new Random();
            for (int i = 0; i < x.Length; i++)
            {
                x[i] = random.Next(1, 999);
            }
 
            for (int i = 0; i < x.Length; i++)
            {
                Console.WriteLine(x[i]);
            }
 
            Console.ReadKey();
        }
    }
}
Разные числа.
0
0 / 0 / 0
Регистрация: 31.05.2011
Сообщений: 7
04.03.2012, 17:00  [ТС] 6
Даю полный код. Создается 2 массива, которые по идее должны заполняться рандомно, но заполняются каждый своей цифрой. Потом 3 массив их объединяет и сортирует.

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
50
51
52
53
54
55
56
57
58
59
60
61
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
 
namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            Random RandomNum = new Random();
            int k,l,i = 0,f = 0;
            Console.WriteLine("Введите размерность второго массива.");
            k = Int16.Parse(Console.ReadLine());
            int[] X = new int[50];
            int[] Y = new int[k];
            l = 50 + k;
            int[] Z = new int[l];
 
            while (i < 50)
            {
                    X[i] = RandomNum.Next(1, 999);
                    i++;
            }
           
            i = 0;
           
            while (i < k)
            {
                Y[i] = RandomNum.Next(1, 999);
                i++;
            }
            
            for (int p = 0; p < 50; p++)
            {
                for (int x = 0; x < 50; x++)
                {
                    Z[p] = X[x];
                }
            }
            for (int p = 50; p < l; p++)
            {
                for (int z = 0; z < k; z++)
                    Z[p] = Y[z];
            }
 
            Array.Sort(Z);
            
            do
            {
                Console.WriteLine(Z[f]);
                f++;
            }
            while (f <= 50);
            Console.ReadKey();
 
        }
    }
}
P.S Может ли эта ошибка быть виной Windows 8 Developers preview ? Ведь рандом берет значение из винды....
0
12 / 12 / 3
Регистрация: 26.11.2010
Сообщений: 147
04.03.2012, 17:04 7
Вот твой код!! ничего не разные ! значения одни!!
Вложения
Тип файла: rar form.rar (91.4 Кб, 13 просмотров)
0
6280 / 3565 / 898
Регистрация: 28.10.2010
Сообщений: 5,926
04.03.2012, 17:28 8
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
public sealed class Randomizer
{
    static Randomizer _randomizer;
    static object _sunc = new object();
    public Random Random { get; private set; }
 
    private Randomizer()
    {
        Random = new Random();
    }
 
    public static Randomizer Instance()
    {
        //чтобы не лочить каждое обращение, так как null будет только 1 раз
        if (_randomizer == null)
        {
            lock (_sunc)
            {
                //теперь ещё раз проверяем, чтобы не создать несколько объектов, 
                //остальные потоки после lock уже не создадут новые объекты
                if (_randomizer == null)
                {
                    _randomizer = new Randomizer();
                }
            }
        }
 
        return _randomizer;
    }
}
C#
1
2
3
4
5
6
7
8
List<koloda> Stol = new List<koloda>();
while (Stol.Count < 10)
{
    Randomizer rand = Randomizer.Instance();
    int pos = rand.Random.Next(0, 52);
 
    Stol.Add(cKoloda.Koloda[pos]);
}
Random имеет алгоритм вычисления случайного числа. В цикле вы всегда создаете новый объект и он каждый раз начинает свой алгоритм сначала, поэтому число всегда одинаковое. Исправленный вариант должен выглядеть примерно так:
C#
1
2
3
4
5
6
7
List<koloda> Stol = new List<koloda>();
Randomizer rand = Randomizer.Instance();
while (Stol.Count < 10)
{ 
    int pos = rand.Random.Next(0, 52);
    Stol.Add(cKoloda.Koloda[pos]);
}
0
12 / 12 / 3
Регистрация: 26.11.2010
Сообщений: 147
04.03.2012, 17:32 9
Петр! Всеравно не помогло!!
0
Эксперт .NET
4432 / 2092 / 404
Регистрация: 27.03.2010
Сообщений: 5,657
Записей в блоге: 1
04.03.2012, 17:45 10
Цитата Сообщение от Петррр Посмотреть сообщение
Random имеет алгоритм вычисления случайного числа. В цикле вы всегда создаете новый объект и он каждый раз начинает свой алгоритм сначала, поэтому число всегда одинаковое.
Так этож Singleton, не должен каждый раз создаваться объект.

И у меня почему-то всегда всё нормально выпадает.
1
Эксперт .NET
17685 / 12871 / 3365
Регистрация: 17.09.2011
Сообщений: 21,136
04.03.2012, 22:16 11
Дык эта, у вас там потом два вложенных цикла зачем-то идет, в результате чего в массив Z всегда пишется последний элемент массива Х или Y.
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
for (int p = 0; p < 50; p++)
            {
                for (int x = 0; x < 50; x++)
                {
                    Z[p] = X[x]; // Z[p] = X[49]
                }
 
            }
            for (int p = 50; p < l; p++)
            {
                for (int z = 0; z < k; z++)
                    Z[p] = Y[z];  // Z[p] = Y[k - 1]
            }
 
            Array.Sort(Z);
            
            do
            {
                Console.WriteLine(Z[f]);
                f++;
            }
            while (f <= 50);
            Console.ReadKey();
0
0 / 0 / 0
Регистрация: 31.05.2011
Сообщений: 7
04.03.2012, 23:22  [ТС] 12
kolorotur, И как тогда мне лучше заполнять массив Z?
0
23 / 23 / 7
Регистрация: 23.02.2012
Сообщений: 107
04.03.2012, 23:49 13
Код
for (int p = 0; p < 50; p++)
{
        Z[p] = X[p];
}
вот так поэлементно скопируется массив Х в массив Z
только я не понял, зачем надо после этого Z переписывать зачениями Y?
0
0 / 0 / 0
Регистрация: 31.05.2011
Сообщений: 7
04.03.2012, 23:53  [ТС] 14
Я уже нашел, спасибо. У меня еще один вопрос, почему он он при любом k дает размер массиву Y 1. И в итоге у меня в Z массиве постоянно 51 элемент.

Добавлено через 59 секунд
MrLong, У меня в Z добавляются, не перезаписываются, элементы из Y. ))) Это объединение массивов.
0
23 / 23 / 7
Регистрация: 23.02.2012
Сообщений: 107
04.03.2012, 23:59 15
DakarX,выложи еще раз свой код. гляну и определюсь
0
0 / 0 / 0
Регистрация: 31.05.2011
Сообщений: 7
05.03.2012, 00:04  [ТС] 16
MrLong, Я уже нашел ошибку. Спасибо всем. И еще один вопрос, можно ли рандомно заполнить bool-массив значениями true или false? )))
0
23 / 23 / 7
Регистрация: 23.02.2012
Сообщений: 107
05.03.2012, 00:09 17
можно, делай рендом от нуля до 1. а дальше как понравится
Код
if (RandomNum == 1)
    Z[i] = true;
else
    Z[i] = false;
а можно и наоборот, на 0 - true, а на 1 - false
0
0 / 0 / 0
Регистрация: 31.05.2011
Сообщений: 7
05.03.2012, 00:13  [ТС] 18
MrLong, Спасибо и на этом, я прост думал что есть Random на этот случай... )))
0
05.03.2012, 00:13
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
05.03.2012, 00:13
Помогаю со студенческими работами здесь

Программа при проверке в цикле не дает срабатывать таймеру в классе
Здравствуйте, форумчане! Неожиданно получил такую проблему и не ясно почему: В приложении создал...

Найдите хоть одно натуральное число, которое делится на 11, а при делении на 2, 3, 4, 5.10 дает в остатке 1
Всем доброго времени суток, вообщем: задали задание &quot;Найдите хоть одно натуральное число, которое...

Одинаковое значение Random()
for (int i = 0; i &lt; CharacterEquipment.Length; i++) { if...

Random.Next можно ли вывести значение?
Здравствуйте! Я создаю новое случайное число, а затем хочу вывести его на консоль. Но только вместо...


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

Или воспользуйтесь поиском по форуму:
18
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru