2016-07-14 98 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