Подскажите/помогите со switch

 

Здравствуйте, можно ли как то задать правила на то, что в скобках:

switch(MuNumb)
{
case 1:A++;break;
case 2:A=+2;break;
case (ВСЕ, ЧТО БОЛЬШЕ 2):A=+3;break;
case -1:B++;break;
case -2:B=+2;break;
case (ВСЕ, ЧТО МЕНЬШЕ -2):B=+3;break;
}

Или придется таким велосипедом делать:

if(MuNumb>0)
{switch(MuNumb)
{
case 1:A++;break;
case 2:A=+2;break;
default:A=+3;break;
}}
if(MuNumb<0)
{switch(MuNumb)
{
case 1:B++;break;
case 1:B=+2;break;
default:B=+3;break;
}}

Но по второму варианту у меня проблема в математике вылазит

 
Tavol:

Здравствуйте, можно ли как то задать правила на то, что в скобках:

Или придется таким велосипедом делать:

Но по второму варианту у меня проблема в математике вылазит

Вроде проблем быть не должно

   if(MuNumb>0) {
      switch(MuNumb) {
      case 1:
         A++;
         break;
      case 2:
         A+=2;
         break;
      default:
         A+=3;
         break;
      }
   } else {
   switch(MuNumb) {
      case -1:
         B++;
         break;
      case -2:
         B+=2;
         break;
      default:
         B+=3;
         break;
      }
   }
 

Как вариант, можно тернарной записью записать.
Но свич в данном примере теоретически мне кажется, должен быть быстрее.
Если скорость не критична, то пара строк тернарной записи, рациональней.
res1 и res2 можно опустить, так как А и В выполняют роль сумматора.

int res1 = (MuNumb ==  1) ? A++ : (MuNumb ==  2) ? A+=2 : (MuNumb >  2) ? A+=3 : 0;
int res2 = (MuNumb == -1) ? B++ : (MuNumb == -2) ? B+=2 : (MuNumb < -2) ? B+=3 : 0;
 
A+=MathMin(MathAbs(MuNumb),3);

Как-то так можно.

 
switch(MuNumb)
   {  case 1: A++;                        break;
      case 2: A = +2;                     break;
      case -1: B++;                       break;
      case -2: B = +2;                    break;
      default:
         if(MuNumb > 2) A = +3;
         else if(MuNumb < -2) B = +3; 
   }
 
Igor Makanu:

Не заметил сразу, что в старт топе +2 +3 присваиваются, а не суммируются ))
Возможно это и есть ошибка, что не получается по математике.

 
Dmitry Fedoseev:

Как-то так можно.

Круто.

 
Roman:

Не заметил сразу, что в старт топе +2 +3 присваиваются, а не суммируются ))
Возможно это и есть ошибка, что не получается по математике.

В этом очевидно и ошибка, только я смотрю операции присвоения и не вижу тут ее. Мне нужна была сумма.

 

Есть еще один вопрос (хотя я вроде как вычитал что НЕТ)

Можно ли как то загнать вычисление в скобки?

switch( MuNumb1+MuNumb2 ){
   case 1: A++; break;
   case 2: A += 2; break;
   case -1: B++; break;
   case -2: B += 2; break;
}

Из-за этого приходится вводит лишнюю переменную в которую ответ заносится отдельно.

Дело в том что у меня таких свитчей будет больше 20

 
Tavol:

В этом очевидно и ошибка, только я смотрю операции присвоения и не вижу тут ее. Мне нужна была сумма.

В том и дело, что это не сумма

A=+2

По последнему примеру, кажется вы поняли это, и сумматор записали верно.

 
Tavol:

Есть еще один вопрос (хотя я вроде как вычитал что НЕТ)

Можно ли как то загнать вычисление в скобки?

Из-за этого приходится вводит лишнюю переменную в которую ответ заносится отдельно.

Дело в том что у меня таких свитчей будет больше 20

Если

MuNumb1+MuNumb2

справедливо для всех >20 свитчей, то лучше завести одну переменную с результатом.
Тем самым избежать избыточные повторяющиеся операции сложения.

Причина обращения: