2015-02-08 109 views
1

摘自enthuware.comJava中的嵌套返回語句

max()方法的下列哪個實現將正確返回最大值?

爲什麼它是不正確的選項和解釋之一: - 我的問題是爲什麼這是錯的?是否有規則可循?

int max(int x, int y){  
    return(
    if(x > y){ 
     return x; 
    } else { 
     return y; 
    } 
    ); 
} 

如果第一個返回和對應的括號被刪除,它會工作。

回答

1

當你有一個帶有X返回類型的方法時,每個return語句後面必須跟一個可以被評估爲X的表達式。這不是你的情況代碼,因爲if聲明沒有價值。

最接近的事到你正在嘗試做的是三元運算符:

int max(int x, int y) 
{ 
    return (x > y)?x:y; 
} 
+0

爲什麼if語句沒有值?它的值我認爲是一個整數 - 無論是x或y取決於if語句的結果。我意識到我錯了,但不太明白這個解釋。 – user4702831 2015-02-08 13:40:29

+0

@ user3258396「if語句」是一個語句。這不是一個表達。只有表達式纔有價值。 – Eran 2015-02-08 13:50:02

3

我的問題是爲什麼這是錯的?是否有規則可循?

是的,該規則被稱爲「語言語法和語法」。


正如你自己發現的,只有下面這段代碼有正確的語法。

int max(int x, int y){ 
    if(x > y){ 
     return x; 
    } else { 
     return y; 
    } 
} 

或者更好的是,

int max(int x, int y){ 
    return x > y? x: y; 
} 

「嵌套的回報」 是沒有意義的。一旦java解釋器遇到「return」語句,它只會查找返回該函數的值並立即退出函數。 (當然有例外,就像finally塊一樣)

+0

,所以你不能嵌套的回報? – user4702831 2015-02-08 13:20:49

+0

@ user3258396:內嵌迴應。 – SuperSaiyan 2015-02-08 13:24:27