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

Создать рандомные числа

09.12.2018, 11:36. Показов 3102. Ответов 11

Студворк — интернет-сервис помощи студентам
Помогите плз, нужно создать рандом C# winform: нажимаю button и в текст боксе должны выводится не повторяющиеся рандомные числа. Максимальное число 20.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
09.12.2018, 11:36
Ответы с готовыми решениями:

Как создать рандомные числа в диапазоне?
Первый вопрос: Как создать рандомные числа в диапазоне? К примеру любое число от 140 до 2700 Я сделал таким образом. Правильный...

Как циклом создать разные рандомные числа в массив
Есть метод создающий рандомные числа Пытаюсь добавить разные рандомные числа в массив через цикл Получилось сделать только...

Рандомные числа
Всем привет! Нужно получать рандомные числа в цикле. Как реализовать? Рандом зависимый от времени мне не подходит судя по всему.. В...

11
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16140 / 11264 / 2888
Регистрация: 21.04.2018
Сообщений: 33,109
Записей в блоге: 2
09.12.2018, 11:51
Цитата Сообщение от burn31 Посмотреть сообщение
Помогите плз, нужно создать рандом C# winform: нажимаю button и в текст боксе должны выводится не повторяющиеся рандомные числа. Максимальное число 20.
Создайте в области формы поле
C#
1
Rabdom rand = new Randow();
В обработчике Click кнопки пропишите
C#
1
textBox.Text = rand.Next(21).ToString();
0
0 / 0 / 0
Регистрация: 09.12.2018
Сообщений: 13
09.12.2018, 11:57  [ТС]
спасибо но, рандомные цифры не должны повторятся это - основная задача
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16140 / 11264 / 2888
Регистрация: 21.04.2018
Сообщений: 33,109
Записей в блоге: 2
09.12.2018, 12:01
Цитата Сообщение от burn31 Посмотреть сообщение
спасибо но, рандомные цифры не должны повторятся это - основная задача
На то они рандомные. Метод Next(int range) возвращает случайное целое число в диапазоне от 0 до range, range в диапазон не входит.
0
315 / 244 / 149
Регистрация: 03.10.2017
Сообщений: 886
Записей в блоге: 1
09.12.2018, 12:28
burn31, Значит массив заполняйте и проверяйте не было ли до этого такого числа или ListBox, как я понимаю у вас в задание

Добавлено через 4 минуты
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
Random rnd = new Random();
 
            List<int> listRandomDigit = new List<int>();
 
            int n = 20;
 
            int i = 0;
 
            int digit;
 
            while (i < n)
            {
                digit = rnd.Next(20);
 
                while (listRandomDigit.Contains(digit)) digit = rnd.Next(20);
 
                listRandomDigit.Add(digit);
 
                i++;
            }
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16140 / 11264 / 2888
Регистрация: 21.04.2018
Сообщений: 33,109
Записей в блоге: 2
09.12.2018, 13:03
Цитата Сообщение от burn31 Посмотреть сообщение
рандомные цифры не должны повторятся это - основная задача
Что конкретно Вы под этим имеете ввиду?
0
Эксперт .NET
 Аватар для kolorotur
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
09.12.2018, 13:13
Лучший ответ Сообщение было отмечено burn31 как решение

Решение

Цитата Сообщение от burn31 Посмотреть сообщение
рандомные цифры не должны повторятся это - основная задача
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
static IEnumerable<int> NonRepeatingSequence(int maxExclusive) => NonRepeatingSequence(0, maxExclusive);
static IEnumerable<int> NonRepeatingSequence(int minInclusive, int maxExclusive)
{
    if (minInclsive > maxExclusive)
       throw new InvalidOperationException();
 
    var rand = new Random();
    var ranges = new List<(int min, int max)> { (minInclusive, maxExclusive) };
    while (ranges.Count > 0)
    {
        var idx = rand.Next(ranges.Count);
        var range = ranges[idx];
        var value = rand.Next(range.min, range.max);
        yield return value;
 
        var left = (min: range.min, max: value);
        var right = (min: value + 1, max: range.max);
 
        if (left.max - left.min > 0)
        {
            ranges[idx] = left;
            if (right.max - right.min > 0)
                ranges.Add(right);
        }
        else if (right.max - right.min > 0)
            ranges[idx] = right;
        else
            ranges.RemoveAt(idx);
    }
}
Цитата Сообщение от burn31 Посмотреть сообщение
нажимаю button и в текст боксе должны выводится не повторяющиеся рандомные числа. Максимальное число 20.
C#
1
2
3
4
void button_Click(object sender, EventArgs e)
{
   textBox.Text = string.Join(" ", NonRepeatingSequence(21));
}
2
0 / 0 / 0
Регистрация: 09.12.2018
Сообщений: 13
09.12.2018, 13:16  [ТС]
например двадцать раз нажимаю кнопку и каждый раз должен выводится уникальное число
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16140 / 11264 / 2888
Регистрация: 21.04.2018
Сообщений: 33,109
Записей в блоге: 2
09.12.2018, 13:19
Понятно, а что делать при 21 нажатии?
Ответ Masson1848 подошёл?
0
Эксперт .NET
 Аватар для kolorotur
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
09.12.2018, 13:23
Цитата Сообщение от burn31 Посмотреть сообщение
например двадцать раз нажимаю кнопку и каждый раз должен выводится уникальное число
Используя код выше:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
IEnumerator<int> sequence;
void button_Click(object sender, EventArgs e)
{
   if (sequence == null)
      sequence = NonRepeatingSequence(21).GetEnumerator();
 
   if (sequence.MoveNext())
      textBox.Text = sequence.Current.ToString();
   else
   {
      MessageBox.Show("А нечего больше показывать!");
 
      // Сбросим в начало.
      sequence.Dispose();
      sequence = null;
   }
}
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16140 / 11264 / 2888
Регистрация: 21.04.2018
Сообщений: 33,109
Записей в блоге: 2
09.12.2018, 13:53
Лучший ответ Сообщение было отмечено burn31 как решение

Решение

Ещё вариант:
В области формы
C#
1
2
Random rаnd = new Random();
List<int> listValue;
В конструкторе формы
C#
1
2
3
int range = 20; // Верхний диапазон чисел включительно
for(int ind =0; ind <= range; ind++)
      listValue.Add(ind);
В событии Click кнопки
C#
1
2
3
4
5
6
7
8
9
int count = listValue.Count();
if (count == 0)
     textBox.Text = "Числа закончились";
else
{
      int index = rаnd.Next(count);
      textBox.Text =  listValue[index].ToString();
      listValue.RemoveAt(index);
}
Добавлено через 23 минуты
Ох..! Ошибку пропустил!
C#
1
2
Random rаnd = new Random();
List<int> listValue = new List<int>();
1
0 / 0 / 0
Регистрация: 09.12.2018
Сообщений: 13
09.12.2018, 14:00  [ТС]
Фуух, спасибо большое!!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
09.12.2018, 14:00
Помогаю со студенческими работами здесь

Рандомные числа в Си Шарк
Можете объяснить как дать переменной рандомное значение?

Одинаковые рандомные числа
Доброго времени суток. Делаю лабораторную работу. Нужно заполнить массивы и посчитать суммы элементов этих массивов. Я решил...

Рандомные не повторяющиеся числа
Добрый день. В Python есть метод модуля Random под названием choice, который выбирает случайные не повторяющиеся числа из выбранного...

Рандомные числа в двух потоках
Задание звучит так: Противостояние нескольких команд. Каждая команда увеличивается на случайное количество бойцов и убивает случайное...

Как генерировать рандомные числа?
Как генерировать рандомные числа в заданном диапозоне? судя из MS документации вот так вот, но ругается, что 2 переменные всунул :( ...


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

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Новые блоги и статьи
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru