2011-06-04 108 views
0

我已經寫在八度使用未給出結果我預期.oct功能,我認爲這個問題可能在於下面給出的代碼片斷 - 它是確定巢邏輯& &運營商,因爲我已經做了還是需要使用進一步的內部if循環來分離出來?嵌套邏輯&&運算符允許嗎?

if (((final_side_PDF > final_uwr_PDF && final_side_PDF > final_unr_PDF) && final_side_PDF > final_dwr_PDF) && final_side_PDF > final_dnr_PDF) 
    { 
    market_model(ii) = 0.0; 
    } 
else if (((final_uwr_PDF > final_side_PDF && final_uwr_PDF > final_unr_PDF) && final_uwr_PDF > final_dwr_PDF) && final_uwr_PDF > final_dnr_PDF) 
    { 
    market_model(ii) = 1.0; 
    } 
else if (((final_unr_PDF > final_side_PDF && final_unr_PDF > final_uwr_PDF) && final_unr_PDF > final_dwr_PDF) && final_unr_PDF > final_dnr_PDF) 
    { 
    market_model(ii) = 2.0; 
    } 
else if (((final_dwr_PDF > final_side_PDF && final_dwr_PDF > final_uwr_PDF) && final_dwr_PDF > final_unr_PDF) && final_dwr_PDF > final_dnr_PDF) 
    { 
    market_model(ii) = -1.0; 
    } 
else if (((final_dnr_PDF > final_side_PDF && final_dnr_PDF > final_uwr_PDF) && final_dnr_PDF > final_unr_PDF) && final_dnr_PDF > final_dwr_PDF) 
    { 
    market_model(ii) = -2.0; 
    } 
else 
    { 
    market_model(ii) = market_model(ii-1); 
    } 

編輯迴應評論

我要檢查它的五個變量中的一個; final_side_PDF,final_uwr_PDF,final_unr_PDF,final_dwr_PDF和final_dnr_PDF;具有最大的價值並返回一個唯一的識別號碼; 0,1,2,-1,-2;取決於哪一個是最大值。上面的代碼包含在主(ii)循環中。

+0

這是確定你用「嵌套'&&'」,但我們不能幫你不知道更多細節。使用'if-else if-else if -..- else'與'if ..;'是非常不同的;如果..; ...'。取決於你想做什麼(: – 2011-06-04 20:45:09

+3

我認爲你的代碼需要重構..有幾個關係檢查可以很容易地分組,這將導致更清晰的代碼 – Xeo 2011-06-04 20:46:51

+1

你發佈的代碼做了你指定它應該你可能會嘗試的是將每個'final_xx_side> final_yy_size'檢查用括號括起來,運算符優先規則表示'''在'&&'之前被評估過,但我遇到過至少一個編譯器 – mtrw 2011-06-04 21:25:11

回答

2

建議:

typedef int final_t; 

// From your code I assume that "final_xx" can have the same values, otherwise a std::map would be simpler. 
std::multimap<final_t, double> finals; 

finals.insert(std::make_pair(final_side_PDF, 0.0)); 
finals.insert(std::make_pair(final_uwr_PDF, 1.0)); 
finals.insert(std::make_pair(final_unr_PDF, 2.0)); 
finals.insert(std::make_pair(final_dwr_PDF, -1.0)); 
finals.insert(std::make_pair(final_dnr_PDF, -2.0)); 

auto max_final = finals.rbegin(); 

if(finals.count(max_final->first) == 1) 
    masket_model(ii) = max_final->second; 
else 
    market_model(ii) = market_model(ii-1); 

如果「final_xx」都具有獨特的價值,你可以讓它更簡單:

typedef int final_t; 

std::map<final_t, double> finals; 

finals[final_side_PDF] = 0.0; 
finals[final_uwr_PDF] = 1.0; 
finals[final_unr_PDF] = 2.0; 
finals[final_dwr_PDF] = -1.0; 
finals[final_dnr_PDF] = -2.0; 

auto max_final = finals.rbegin(); 

market_model(ii) = max_final->second; 
+0

是的,任何兩個「final_xx」值都可能是相同的,因此默認的「market_model(ii)= market_model(ii-1);」在這種情況下爲 然而, ,我喜歡你的建議。 – babelproofreader 2011-06-06 11:46:37