Лучшее использование для обработки нескольких операторов IF - PullRequest
3 голосов
/ 18 марта 2012

Мне интересно, как лучше всего это сделать: в моем сценарии пользователи выбирают от 1 до 5 опций, в зависимости от их опций, они должны случайным образом выбирать из трех.

Скажем, у пользователя выбран вариант 2 и 3, я мог бы написать оператор IF, говоря, что когда он выбран, сделать это и т. Д., Проблема в том, что я не хочу писать операторы IF для всех возможных комбинаций.

Просто интересно, как проще всего об этом?

Полагаю, я мог бы перейти, но опять-таки это потребовало бы программирования каждой отдельной комбинации.

Спасибо.

Редактировать: код для небольшого примера

bool Option1 = false;
bool Option2 = false;
bool Option3 = false;

if (Option1 == true && Option2 == false && Option3 == false)
{
//Do Somthing
}
else if (Option1 == true && Option2 == true && Option3 == false)
{
//Do Somthing
}
else if (Option1 == true && Option2 == false && Option3 == true )
{
//Do Somthing
}

И так далее.

Ответы [ 3 ]

4 голосов
/ 18 марта 2012

Я бы пошел на вложенные, если это.вы всегда можете сгруппировать их по функциям, если это станет слишком нечитаемым:

if( option1 )
{
   if ( option2 )
   {
      if ( option3 )
      {
         doThing2();
      }
      else
      {
         doThing1(); // no more alternatives
      }
   }
   else
   {
      doThing1(); // need to do the same as above
   }
}
else
{
  ... more or less the same as above
}

Я думаю, что так оно и было.И с хорошими редакторами это становится легко читаемым ...

hth

MNario

4 голосов
/ 18 марта 2012

Это зависит от того, что на самом деле делает "// Do Somthing".

Если между опциями есть некоторое дублирование кода, поместите его в функцию и вызовите ее.Или разделите дублированный код на отдельный if ( Option1 ) { ... } блок.

Как вы уже упоминали, вы можете превратить действительные комбинации в перечисление (5 битов - 32 значения) и поместить его в оператор switch.

3 голосов
/ 18 марта 2012

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

Возможно, вам будет полезно ввести другие флаги (например, exactlyTwoOptionsSelected), которые вы затем сможете использовать в ветвлении.

Кстати, писать if (option1 && option2) или if (!option1 || option2) и т. Д. Будет проще с if (option1 == true && option2 == true) и if(option1 == false || option2 == true).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...