2016-07-14 108 views
0
if (x < 275 && x >= 0) 
    f = 275 
else if (x < 450 && x >= 275) (right side comparison always previous left side default comparison value 
    f = 450 
else if (x < 700 && x >= 450) 
    f = 700 
else if (x < 1000 && x >= 700) 
    f = 1000 
..... and more 

是否有任何方式或数学公式的方法来消除这个多if else语句为更少的代码需要?更好的方法太多,如果其他语句

+1

我个人会放弃'&& x> = 275)'等等,因为它们没有效果。如果else if的列表太长,我会使用表查找。 (顺便说一句,请用您的编程语言标记问题) –

+0

您的优先级是使其运行尽可能快还是尽可能容易阅读? – samgak

+0

@ KenY-N好吧,我同意你的下降&& x> = 275)会帮助很多。将再次编辑该问题。 – hiboss

回答

2

这里是C中的东西(但很容易移植到几乎任何东西)。它错过了一些条件(x < 0和x>“最大已知”)当你只有4个值时它不会增加太多的值,但是你拥有的值越多,代码就越多。请注意,它会减慢速度,但是如果你没有一个可能的值的列表,你会注意到它。

int getF(int x) 
{ 
    /* possibleValues must be sorted in ascending order */ 
    int possibleValues[] = { 275, 450, 700, 1000 }; 
    for(int i = 0; i < sizeof(possibleValues)/sizeof(possibleValues[0]); i++) 
    { 
     int pv = possibleValues[i]; 
     if (x < pv) 
     { 
      return pv; 
     } 
    } 
    /* fall thru "error" handle as you see fit */ 
    return x; 
} 
0

假设x>0。只是避免if-else,这也应是足够的条件 -

x<275 ? 275 : (x<450 ? 450 : (x<700 ? 700 : (x<1000 ? 1000 : 

但如果有像INT,BIG等,而不是275,450输入的任何定义的类型范围..你可以检查输入的类型。你也可以像@ John3136所建议的那样使用迭代。

+1

我认为这更难以阅读。 – duffymo

1
if(x>0) 
{ 
    if(x<275) 
     f = 275; 
    else if(x<450) 
     f = 450; 
    else if(x<700) 
     f = 700; 
    else if(x<1000) 
     f = 1000; 
    else //and so on