Вопрос по switch

szvizit

Пользователь
Регистрация
23.11.2014
Сообщения
57
Благодарностей
3
Баллы
8
Добрый день, не могу разобраться со switch видно где то не понял. Мне надо чтобы свитч проверял значения от 0 до 50, от 50 до 100 и т.д. И в зависимости от того какое значения переходил по нужной мне ветке.
С помощью if сделал это легко. Но конструкция получается очень громоздкой так как шаг 50, а мне надо порой бывает до 4000 и более.
Делал 28 значения почему то постоянно переходит по Default

В switch задую следующее
{-Variable.kolichestvo-}<50 это 1 строчка
{-Variable.kolichestvo-}>50&&{-Variable.kolichestvo-}<100 2 строчка
{-Variable.kolichestvo-}>100&&{-Variable.kolichestvo-}<150 3 строчка и т.д.
В общем едет он только по первой. Не могу понять почему в if работает. в switch нет.
 
  • Спасибо
Реакции: Karamzin

ssXXXss

Client
Регистрация
23.12.2014
Сообщения
7 379
Благодарностей
2 041
Баллы
113
свитч на сравнение больше меньше не работаёт, он только по определённым заданным значениям, вот как через if делали так и делайте дальше
 
  • Спасибо
Реакции: Karamzin

szvizit

Пользователь
Регистрация
23.11.2014
Сообщения
57
Благодарностей
3
Баллы
8
Спасибо. А можно как то упростить конструкцию т.е в одном if прописать 28 значений или 40 чтобы он сразу ставил нужный параметр например если 100 то счетчик 2, если 150 то 3 и.т.д.?
 

ssXXXss

Client
Регистрация
23.12.2014
Сообщения
7 379
Благодарностей
2 041
Баллы
113
Спасибо. А можно как то упростить конструкцию т.е в одном if прописать 28 значений или 40 чтобы он сразу ставил нужный параметр например если 100 то счетчик 2, если 150 то 3 и.т.д.?
с одного экшена два выхода, в любом случае под каждое сравнение отдельный экшен, их сравнить можно в одном кубике и до милиона, но разорвать один выход на разные ветки никак
 
  • Спасибо
Реакции: Karamzin

Dimionix

Moderator
Регистрация
09.04.2011
Сообщения
3 068
Благодарностей
3 122
Баллы
113
Вы лучше опишите конкретные действия (что должно выполняться), после экшена If, может гораздо проще это будет осуществить в C# коде. Городить 80 (4000/50) Ifов не нормально:( А лучше приложите кусок проекта.
 
Последнее редактирование:
  • Спасибо
Реакции: Karamzin

ssXXXss

Client
Регистрация
23.12.2014
Сообщения
7 379
Благодарностей
2 041
Баллы
113
а хотя если я правильно понимаю то наверно можно и в одном кубике это сделать, вот пример
Код:
int x = int.Parse(project.Variables["kolichestvo"].Value);
project.Variables["Counter"].Value = "1";
if(x <= 50)  throw new Exception("меньше");
project.Variables["Counter"].Value = "2";
if(x <= 100)  throw new Exception("меньше");
тут выход по красной ветке считается верным, ну и если такое подходит, то до 4000 заполняете строки дальше, меняя значение Counter
 
  • Спасибо
Реакции: Karamzin

Dimionix

Moderator
Регистрация
09.04.2011
Сообщения
3 068
Благодарностей
3 122
Баллы
113
а хотя если я правильно понимаю то наверно можно и в одном кубике это сделать, вот пример
тут выход по красной ветке считается верным, ну и если такое подходит, то до 4000 заполняете строки дальше, меняя значение Counter
Я так понимаю, что ТСу нужно не два выхода, а
Мне надо чтобы свитч проверял значения от 0 до 50, от 50 до 100 и т.д. И в зависимости от того какое значения переходил по нужной мне ветке.
 

ssXXXss

Client
Регистрация
23.12.2014
Сообщения
7 379
Благодарностей
2 041
Баллы
113
Я так понимаю, что ТСу нужно не два выхода, а
как я понял ему надо взять строку из этого определённого значения, если от 1 до 50 то строка 1, если от 51 до 100 то строка 2, если так то этот вариант ему подходит, после этого снипета, операции над списком=>получить строку=>указать номер, где номер переменная Counter
 
  • Спасибо
Реакции: Karamzin

szvizit

Пользователь
Регистрация
23.11.2014
Сообщения
57
Благодарностей
3
Баллы
8
Не совсем так. Это для парсера смотрит кол-во объявлений и ставит нужное кол-во страниц для парсинга. т.е получается если объявлений 50 то 1 страница ставит счетчик 1 если 143 объявления ставит счетчик 3 и парсит 3 страницы и т.д. В итоге если 2434 объявления это ему надо спарсить 48 страниц (по 50 объявлений на странице) поэтому идет счетчик на 48
 

ssXXXss

Client
Регистрация
23.12.2014
Сообщения
7 379
Благодарностей
2 041
Баллы
113
Не совсем так. Это для парсера смотрит кол-во объявлений и ставит нужное кол-во страниц для парсинга. т.е получается если объявлений 50 то 1 страница ставит счетчик 1 если 143 объявления ставит счетчик 3 и парсит 3 страницы и т.д. В итоге если 2434 объявления это ему надо спарсить 48 страниц (по 50 объявлений на странице) поэтому идет счетчик на 48
в моём случае это так и есть, если 50 то ставит одну страницу, если 143 то поставит 3, и т.д., только тебе логику после этого снипета составить сколько парсить страниц
 
  • Спасибо
Реакции: Karamzin

7make

Client
Регистрация
25.06.2011
Сообщения
1 547
Благодарностей
1 311
Баллы
113

Обращаем Ваше внимание на то, что данный пользователь заблокирован.
Не рекомендуем проводить с 7make какие-либо сделки.

Допустим....
Есть сетка значений от 0 до 5000
Шаг сетки 50 (0...50...100...150....5000)
1. Нужно проверить к какому диапазону принадлежит некое значение. Переменная someValue содержит это значение.
...

Решение в 1 строку кода на шарпе..
1. Взять целую часть от деления на 50.

Код:
int someValue = Convert.ToInt32(project.Variables["someValue"].Value);
return someValue/50;
Вопрос только в одном, значения кратные 50 без остатка...это (50...100...150) включающие или исключаемые. Тогда просто нужно сделать +1 к ответу.

Код:
return someValue/50+1;

п.с. Правильно и ясно формулируйте задачи. Быстрее получите верный ответ.
 
Последнее редактирование:
  • Спасибо
Реакции: Karamzin

ssXXXss

Client
Регистрация
23.12.2014
Сообщения
7 379
Благодарностей
2 041
Баллы
113
Допустим....
Есть сетка значений от 0 до 5000
Шаг сетки 50 (0...50...100...150....5000)
1. Нужно проверить к какому диапазону принадлежит некое значение. Переменная someValue содержит это значение.
...

Решение в 1 строку кода на шарпе..
1. Взять целую часть от деления на 50.

Код:
int someValue = Convert.ToInt32(project.Variables["someValue"].Value);
return someValue/50;
п.с. Правильно и ясно формулируйте задачи. Быстрее получите верный ответ.
143 разделить на 50, мы ни как в этом случае не получим 3
 
  • Спасибо
Реакции: Karamzin

7make

Client
Регистрация
25.06.2011
Сообщения
1 547
Благодарностей
1 311
Баллы
113

Обращаем Ваше внимание на то, что данный пользователь заблокирован.
Не рекомендуем проводить с 7make какие-либо сделки.

дополнил ответ выше.
п.с. о чем и говорю, формулируйте яснее.
 
  • Спасибо
Реакции: Karamzin

ssXXXss

Client
Регистрация
23.12.2014
Сообщения
7 379
Благодарностей
2 041
Баллы
113
можно было бы так return (someValue/50)+1; но в этом случае числа кратные 50 будут на один больше

:D я саму страницу не обновлял, и не увидел что ты пост обновил

у меня наподобие в одном проекте есть такое сравнение, я делю и проверяю сразу же, если число целое то не плюсую, если запятая присутствует то +1
 
Последнее редактирование модератором:
  • Спасибо
Реакции: Karamzin

szvizit

Пользователь
Регистрация
23.11.2014
Сообщения
57
Благодарностей
3
Баллы
8
Тогда следующий вопрос. Можно ли в if сделать следующую конструкцию.
{-Variable.kolichestvo-}<50 ставим значения счетчика 1
{-Variable.kolichestvo-}>50&&{-Variable.kolichestvo-}<100 ставим значения счетчика 2
т.е он в if перебирает все нужные значения списком но на выходе ставит одно значения
т.е такое условие если больше 50 , но меньше 100 то ставим 2 (значения счетчика), чтобы не выносить его отдельным действием.
 

szvizit

Пользователь
Регистрация
23.11.2014
Сообщения
57
Благодарностей
3
Баллы
8
Чего я хочу добиться захожу на страницу беру число объявлений например там стоит 143, чтобы ему все спарсить ему надо пройти 3 страницы так как отображается по 50 объявлений на странице. Вот чтобы он перебрал значения в сетке причем они могут быть не с шагом по но с условием например больше 50 но меньше 100
 

szvizit

Пользователь
Регистрация
23.11.2014
Сообщения
57
Благодарностей
3
Баллы
8
Или можно как то по другому реализовать. Например выбираем значения согласно условию {-Variable.kolichestvo-}>=2900&&{-Variable.kolichestvo-}<=2950 и этот диапозон например равен 58 а диапозон {-Variable.kolichestvo-}>=2950&&{-Variable.kolichestvo-}<=3000 равен 59 т.е мы это так через что нибудь задаем например заранее и тогда после перебора значений нам надо установить число н-р 59 если значение находится в том диапозоне, который мы прописали ранее.

Честно сказать в C не силен.
 

7make

Client
Регистрация
25.06.2011
Сообщения
1 547
Благодарностей
1 311
Баллы
113

Обращаем Ваше внимание на то, что данный пользователь заблокирован.
Не рекомендуем проводить с 7make какие-либо сделки.

В чем смысл перебирать ифами..если целое от деления на 50 вернет аналогичный результат?

накидал в студии.
через счетчик, менее извращенно чем с ифами...
замени на переменные зенки уже сам.
C#:
            //Предел диапазона значений
            int maxRange = 5000;
            //Шаг сетки диапазона
            int stepRange = 50;

            //Рандомное значение (заменить на переменную в РМ)
            Random rnd = new Random();         
            int val = rnd.Next(maxRange);

            //Искомый диапазон
            int range = 0;

            for (int i = 0; i < maxRange; i=i+stepRange)
            {
                if (val < i)
                {
                    break;
                }
                range++;
        

            }
            //Отладочная строка
            //return String.Format("Рандомное значение {0} входит в диапазон {1} ({2}), это значение лежит в интервале {3}...{4}", val, range, range*50, range*50-50, range*50 );

            //Вернет номер диапазона
            return range;
upload_2015-8-23_21-52-34.png
 
Последнее редактирование:
  • Спасибо
Реакции: Karamzin

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