2013-10-18 72 views
1
double soilQuality(int x, int y) { 
    double typeA, typeB, soilQual; 

    if (((x >= 1) && (x <= 20)) && ((y >= 1) && (y <= 20))) { 
     typeA = 1 + (sqrt((pow(x - SOILQUALACONST, 2)) + (pow(y - SOILQUALACONST,   2)) * (1.0))); 
     typeB = (1 + ((abs(x - SOILQUALBCONST) + abs(y - SOILQUALBCONST))/(2.0))); 

     soilQual = (((x + y) % 2) * typeB) + ((1 - ((x + y) % 2)) * typeA); 
    } 

    if (((x < 1) || (x >20)) || ((y < 1) || (y > 20))) { 
     soilQual = -1.0; 
    } 

    return soilQual; 

}我的if語句是否正確寫入?

只是幾個簡單的問題,如果我創建一個測試是否X和Y是在區間[1,20]變量警衛,將第一if語句是正確的?如果x和y不在該間隔中,則返回-1;我的第二個陳述是否正確?最後一個問題,我的語法是否返回正確的值? (更具體地說,我是否可以像我在代碼中一樣返回最終值?)

由於某種原因,我的輸出與教練輸出不同,我已經對公式進行了雙重檢查,對我來說很好,所以我在想我的代碼的語法有問題。

謝謝!

+1

你可以簡單地代碼'如果(X> = 1 && X <= 20 && y > = 1個&&Ŷ<= 20)',其是相同的,但更可讀。 –

+0

哦!感謝您的建議Basile Starynkevitch! – Karen

+3

第二個'if'子句可以更改爲else,因爲全部完成 – Mine

回答

6

無論x和y分別爲在區間[1,20]

是的,正確的。

如果x和y不在該間隔上,則返回-1;我的第二個陳述是否正確?

但你並不需要第二個如果,加上其他與第一,如果:

if (((x >= 1) && (x <= 20)) && ((y >= 1) && (y <= 20))) { 
     // both x, and y are in range [1, 20] 
    } 
    else{ 
     soilQual = -1.0; 
    } 

而最後一個問題,是我的返回值正確的語法?

是的,正確的

因爲出於某種原因,我的輸出是比我的導師輸出不同的,我已經雙重檢查我的公式,它看起來好像沒什麼問題,所以我在想什麼是錯的在我的代碼的語法中。

如果有語法錯誤,那麼代碼不會編譯!

因爲你具有讀取的數值,可改爲: What Every Computer Scientist Should Know About Floating-Point Arithmetic