Рандомное число из изменяющегося диапазона

Кирилл412

Пользователь
Регистрация
21.11.2018
Сообщения
146
Благодарностей
3
Баллы
18
В шабе стоит свич на 10 вариантов выхода, выход задается рандомным числом.., в процессе работы шаба некоторые варианты нужно отсечь, как это можно реализовать, не нагромождая кубиками
 

gevolushn

Известная личность
Регистрация
25.03.2019
Сообщения
518
Благодарностей
269
Баллы
63
Через код. Одним кубиком. Типо такого:
Код:
int rand = Convert.ToInt32(project.Variables["rand"].Value);
for (int i = 0; i < 10; i++)
     {
           if (rand != nenujnoe_chyslo) {continue;}
           else {project.Variables["rand"].Value = Convert.ToString(rand); return 0;}
     }
Лень сейчас думать, если честно.
 
  • Спасибо
Реакции: Кирилл412

Кирилл412

Пользователь
Регистрация
21.11.2018
Сообщения
146
Благодарностей
3
Баллы
18
Через код. Одним кубиком. Типо такого:
Код:
int rand = Convert.ToInt32(project.Variables["rand"].Value);
for (int i = 0; i < 10; i++)
     {
           if (rand != nenujnoe_chyslo) {continue;}
           else {project.Variables["rand"].Value = Convert.ToString(rand); return 0;}
     }
Лень сейчас думать, если честно.
спасибо, попробую
 

gevolushn

Известная личность
Регистрация
25.03.2019
Сообщения
518
Благодарностей
269
Баллы
63
del
 
Последнее редактирование:
  • Спасибо
Реакции: Кирилл412

Кирилл412

Пользователь
Регистрация
21.11.2018
Сообщения
146
Благодарностей
3
Баллы
18
Код:
string error = "Все гуд";
int rand = Convert.ToInt32(project.Variables["rand"].Value);//записываем в локальную переменную значение из переменной проекта
int nenujnoe_chyslo = Convert.ToInt32(project.Variables["nenujnoe_chyslo"].Value);//записываем в локальную переменную значение из переменной проекта
for (int i = 0; i < 10; i++)//цикл на 10 итераций
     {
           if (rand == nenujnoe_chyslo) {error = "Число плохое"; continue;}//если число, которое зарандомило равно ненужному, пропускаем итерацию
           else {error = "Все гуд"; break;}//если число подходит, то выходим из цикла и возвращаем нужное значение
     }
if (error == "Число плохое")//если нет подходящего числа
     {throw new Exception();}//кубик выходит по красному пути
return error;
Так думаю будет чуть-чуть правильней.
Самое главное тебе понять логику, что нужно сделать в коде. Сможешь сам написать под свои нужды, если разберешься.
спасибо
 

Кирилл412

Пользователь
Регистрация
21.11.2018
Сообщения
146
Благодарностей
3
Баллы
18
Код:
string error = "Все гуд";
int rand = Convert.ToInt32(project.Variables["rand"].Value);//записываем в локальную переменную значение из переменной проекта
int nenujnoe_chyslo = Convert.ToInt32(project.Variables["nenujnoe_chyslo"].Value);//записываем в локальную переменную значение из переменной проекта
for (int i = 0; i < 10; i++)//цикл на 10 итераций
     {
           if (rand == nenujnoe_chyslo) {error = "Число плохое"; continue;}//если число, которое зарандомило равно ненужному, пропускаем итерацию
           else {error = "Все гуд"; break;}//если число подходит, то выходим из цикла и возвращаем нужное значение
     }
if (error == "Число плохое")//если нет подходящего числа
     {throw new Exception();}//кубик выходит по красному пути
return error;
Так думаю будет чуть-чуть правильней.
Самое главное тебе понять логику, что нужно сделать в коде. Сможешь сам написать под свои нужды, если разберешься.
Только, если я правильно понимаю, не силен в c#, этим кодом будет возвращать первое нужное число.., а надо чтоб из оставшихся тож рандомно брал... если конечно я код правильно понимаю )))
 

gevolushn

Известная личность
Регистрация
25.03.2019
Сообщения
518
Благодарностей
269
Баллы
63
Я, наверное, пьяный. Зачем то впихнул цикл, когда он не нужен.
Код:
int rand = Convert.ToInt32(project.Variables["rand"].Value);//записываем в локальную переменную значение из переменной проекта
int nenujnoe_chyslo = Convert.ToInt32(project.Variables["nenujnoe_chyslo"].Value);//записываем в локальную переменную значение из переменной проекта

if (rand == nenujnoe_chyslo)//если число, которое зарандомило равно ненужному
    {
        throw new Exception()//то выходим из блока по красной ветке
    }
else {return 0;}//если число подходит, то выходим из блока по зеленой ветке
 

gevolushn

Известная личность
Регистрация
25.03.2019
Сообщения
518
Благодарностей
269
Баллы
63
Только, если я правильно понимаю, не силен в c#, этим кодом будет возвращать первое нужное число.., а надо чтоб из оставшихся тож рандомно брал... если конечно я код правильно понимаю )))
Если хочешь, скинь шаб тестовый (в лс, или как) и я напишу тебе код, а то это ни к чему не приведет.
 
  • Спасибо
Реакции: Кирилл412

ssXXXss

Client
Регистрация
23.12.2014
Сообщения
7 379
Благодарностей
2 039
Баллы
113
а для чего else, return, если не по красной то он и так выйдет по зелёной т.к. там никакой проверки нет
 

gevolushn

Известная личность
Регистрация
25.03.2019
Сообщения
518
Благодарностей
269
Баллы
63

Кирилл412

Пользователь
Регистрация
21.11.2018
Сообщения
146
Благодарностей
3
Баллы
18
Если хочешь, скинь шаб тестовый (в лс, или как) и я напишу тебе код, а то это ни к чему не приведет.
ну интересующий кусок, это рандомное число от 1 до 11, и свич на 10 выходов по этим числам.. в процессе, допустим, по третей и седьмой ветке выходить больше не надо, а по оставшимся восьми так же рандомно продолжить
 

Кирилл412

Пользователь
Регистрация
21.11.2018
Сообщения
146
Благодарностей
3
Баллы
18
Я, наверное, пьяный. Зачем то впихнул цикл, когда он не нужен.
Код:
int rand = Convert.ToInt32(project.Variables["rand"].Value);//записываем в локальную переменную значение из переменной проекта
int nenujnoe_chyslo = Convert.ToInt32(project.Variables["nenujnoe_chyslo"].Value);//записываем в локальную переменную значение из переменной проекта

if (rand == nenujnoe_chyslo)//если число, которое зарандомило равно ненужному
    {
        throw new Exception()//то выходим из блока по красной ветке
    }
else {return 0;}//если число подходит, то выходим из блока по зеленой ветке
Спасибо, думаю так будет работать .. не посмотреть пока
 

gevolushn

Известная личность
Регистрация
25.03.2019
Сообщения
518
Благодарностей
269
Баллы
63
Спасибо, думаю так будет работать .. не посмотреть пока
Лови
Код:
Random rand = new Random();//создаем команду для рандома
int rand_chys;//рандомим от 1 до 10
int nenujnoe_chyslo;//создаем переменную для ненужного числа
string error;//переменная для проверки совпадения

do
    {
        rand_chys = rand.Next(1, 11);//рандомим от 1 до 10
        error = "Good";//переменная для проверки совпадения
        for (int i = 0; i < project.Lists["Ненужные варианты"].Count; i++)//цикл с итерациями по количеству строк в списке
            {
                nenujnoe_chyslo = Convert.ToInt32(project.Lists["Ненужные варианты"][i]);//берем из списка по индексу ненужное число
                if (rand_chys == nenujnoe_chyslo)//если число, которое зарандомило равно ненужному
                    {
                        error = "Bad";//плохое число
                        break;
                    }         
            }
    }
while (error != "Good");

project.Variables["chys"].Value = Convert.ToString(rand_chys);
return rand_chys;
В список заносишь ненужные варианты (можно к файлу привязать).
Рандомит до тех пор, пока не возмет нужный тебе вариант. Если я тебя првильно понял.
P.S. Если нужно единожды зарандомить, то меняешь break; на throw new Exception();. И кубик уйдет по красной ветке
 

Вложения

Последнее редактирование:
  • Спасибо
Реакции: Кирилл412

Кирилл412

Пользователь
Регистрация
21.11.2018
Сообщения
146
Благодарностей
3
Баллы
18
Лови
Код:
Random rand = new Random();//создаем команду для рандома
int rand_chys;//рандомим от 1 до 10
int nenujnoe_chyslo;//создаем переменную для ненужного числа
string error;//переменная для проверки совпадения

do
    {
        rand_chys = rand.Next(1, 11);//рандомим от 1 до 10
        error = "Good";//переменная для проверки совпадения
        for (int i = 0; i < project.Lists["Ненужные варианты"].Count; i++)//цикл с итерациями по количеству строк в списке
            {
                nenujnoe_chyslo = Convert.ToInt32(project.Lists["Ненужные варианты"][i]);//берем из списка по индексу ненужное число
                if (rand_chys == nenujnoe_chyslo)//если число, которое зарандомило равно ненужному
                    {
                        error = "Bad";//плохое число
                        break;
                    }       
            }
    }
while (error != "Good");

project.Variables["chys"].Value = Convert.ToString(rand_chys);
return rand_chys;
В список заносишь ненужные варианты (можно к файлу привязать).
Рандомит до тех пор, пока не возмет нужный тебе вариант. Если я тебя првильно понял.
P.S. Если нужно единожды зарандомить, то меняешь break; на throw new Exception();. И кубик уйдет по красной ветке
Спасибо, очень помогли, только если ненужные варики убрать из списка, код с ошибкой идет
 
Последнее редактирование:

gevolushn

Известная личность
Регистрация
25.03.2019
Сообщения
518
Благодарностей
269
Баллы
63
Спасибо, очень помогли, только если ненужные варики убрать из списка, код с ошибкой идет
Удаляйте полностью строку, а не значение в ней. Через клавишу Del. Значения для проверки должны быть числовые, без пробелов и т.п.
 
  • Спасибо
Реакции: Кирилл412

Кто просматривает тему: (Всего: 1, Пользователи: 0, Гости: 1)