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

Заполнение массива неповторяющимися числами

23.04.2022, 23:57. Показов 370. Ответов 1

Студворк — интернет-сервис помощи студентам
При повторном перемешивании массива, массив не изменяется. В чём может быть дело?

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
public static int[] shuffle(int[] arr)
        {
            int[] x = {2, 3, 4, 5, 6};
            Random r = new Random();
            for (int i = 0; i < x.Length - 1; i++)
            {
                bool contains;
                int next;
                do
                {
                    next = r.Next(x.Length);
                    contains = false;
                    for (int index = 0; index < i; index++)
                    {
                        int n = x[index];
                        if (n == next)
                        {
                            contains = true;
                            break;
                        }
                    }
                } while (contains);
                x[i] = next;
            }
            for (int i = 1; i < arr.Length-1; i++)
            {
                arr[i] = x[i - 1];
            }
            return arr;
        }
 
        private static void Main(string[] args)
        {
 
            int[] x = { 1, 0, 0, 0, 0, 0, 1 };
            x = shuffle(x);
            string str = string.Join(", ", x);
            Console.WriteLine(str);
            x = shuffle(x);
            str = string.Join(", ", x);
            Console.WriteLine(str);
            x = shuffle(x);
            str = string.Join(", ", x);
            Console.WriteLine(str);
            x = shuffle(x);
            str = string.Join(", ", x);
            Console.WriteLine(str);
 
            Console.ReadKey();
        }
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
23.04.2022, 23:57
Ответы с готовыми решениями:

Заполнение массива неповторяющимися числами
всем привет! как нада сделатъ чтоб не был одинаковие значение в массивe? using System; using System.Collections.Generic; using...

Заполнение массива случайными неповторяющимися числами
Нужно заполнить таблицу на странице случайными числами от 1 до 16, без повторений. Я сделал проверку на совпадения, но при запуске...

Заполнение массива неповторяющимися случайными числами
Добрый день. Подскажите как двумерный(одномерный) массив заполнить случайными числа в диапазоне от 1 до 9, но чтобы числа все были разные,...

1
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16140 / 11264 / 2888
Регистрация: 21.04.2018
Сообщений: 33,111
Записей в блоге: 2
24.04.2022, 10:23
Цитата Сообщение от RGBAF Посмотреть сообщение
В чём может быть дело?
Random должен быть статическим полем только для чтения.

Добавлено через 28 минут
RGBAF, и не путайте три разных понятия: "перемешать имеющийся массив", "создать новый массив с перемешанными элементами исходного" и "получить случайным образом все элементы массива".

Пример методов расширения:
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
namespace Core2022
{
    public static partial class ExtensionMethods
    {
        private static readonly Random random = new Random();
 
        /// <summary>Переставляет все элементы списка случайным образом.</summary>
        /// <typeparam name="T">Тип элементов списка.</typeparam>
        /// <param name="list">Перемешиваемый список или массив.</param>
        public static void Shuffle<T>(this IList<T> list)
        {
            for (int i = list.Count - 1; i > 0; i--)
            {
                int randomIndex = random.Next(i + 1);
                (list[i], list[randomIndex]) = (list[randomIndex], list[i]);
            }
        }
 
        /// <summary>Возвращает в случайном порядке элементы исходной последовательности.</summary>
        /// <typeparam name="T">Тип элементов последовательности.</typeparam>
        /// <param name="source">Исходная последовательность.</param>
        /// <returns>Элементы исходной последовательности в случайном порядке.</returns>
        public static IEnumerable<T> OrderShuffle<T>(this IEnumerable<T> source)
        {
            return source.OrderBy(t => random.Next());
        }
    }
}
Их использование:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
int[] x = {2, 3, 4, 5, 6}; // Исходный массив
 
x.Shuffle();
Console.Write("Перемешивание исходного массива: ");
Console.WriteLine(string.Join(", ", x));
 
 
var y = x.OrderShuffle(); 
Console.WriteLine("Получение перемешанных элементов без изменения исходного массива. ");
Console.Write("Исходный массив до перемешанного получения: ");
Console.WriteLine(string.Join(", ", x));
Console.Write("Первое перемешанное получение: ");
Console.WriteLine(string.Join(", ", y));
Console.Write("Второе перемешанное получение: ");
Console.WriteLine(string.Join(", ", y));
Console.Write("Исходный массив после перемешанного получения: ");
Console.WriteLine(string.Join(", ", x));
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
24.04.2022, 10:23
Помогаю со студенческими работами здесь

Заполнение массива неповторяющимися случайными числами
А как тоже самое провернуть с PascalABC и FreeBasic? Заранее спасибо.

Заполнение массива неповторяющимися случайными числами
А как тоже самое провернуть с PascalABC и FreeBasic? Заранее спасибо.

Заполнение массива неповторяющимися случайными числами
Добрый день. Подскажите как двумерный(одномерный) массив заполнить случайными числа в диапазоне от 1 до 9, но чтобы числа все были разные,...

Заполнение двухмерного массива случайными и неповторяющимися числами
Доброго времени суток. В задачке нужно заполнить двухмерный(трехмерный) массив случайными неповторяющимися цифрами. Одномерный массив...

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


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

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Новые блоги и статьи
Автозаполнение реквизита при выборе элемента справочника
Maks 27.03.2026
Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. При выборе "Спецтехники" (Тип Справочник. Спецтехника), заполняется. . .
Сумматор с применением элементов трёх состояний.
Hrethgir 26.03.2026
Тут. https:/ / fips. ru/ EGD/ ab3c85c8-836d-4866-871b-c2f0c5d77fbc Первый документ красиво выглядит, но без схемы. Это конечно не даёт никаких плюсов автору, но тем не менее. . . всё может быть. . .
Автозаполнение реквизитов при создании документа
Maks 26.03.2026
Программный код из решения ниже размещается в модуле объекта документа, в процедуре "ПриСозданииНаСервере". Алгоритм проверки заполнения реализован для исключения перезаписи значения реквизита,. . .
Команды формы и диалоговое окно
Maks 26.03.2026
1. Команда формы "ЗаполнитьЗапчасти". Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. В качестве источника данных. . .
Кому нужен AOT?
DevAlt 26.03.2026
Решил сделать простой ланчер Написал заготовку: dotnet new console --aot -o UrlHandler var items = args. Split(":"); var tag = items; var id = items; var executable = args;. . .
Отправка уведомления на почту при изменении наименования справочника
Maks 24.03.2026
Программная отправка письма электронной почты на примере изменения наименования типового справочника "Склады" в конфигурации БП3. Перед реализацией необходимо выполнить настройку системной учетной. . .
модель ЗдравоСохранения 5. Меньше увольнений- больше дохода!
anaschu 24.03.2026
Теперь система здравосохранения уменьшает количество увольнений. 9TO2GP2bpX4 a42b81fb172ffc12ca589c7898261ccb/ https:/ / rutube. ru/ video/ a42b81fb172ffc12ca589c7898261ccb/ Слева синяя линия -. . .
Midnight Chicago Blues
kumehtar 24.03.2026
Такой Midnight Chicago Blues, знаешь?. . Когда вечерние улицы становятся ночными, а ты не можешь уснуть. Ты идёшь в любимый старый бар, и бармен наливает тебе виски. Ты смотришь на пролетающие. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru