2016-02-01 88 views
-2

我的程序似乎不明白我在做什麼,並希望如果有人能幫助,我得到一個錯誤說我需要返回一個對象,但我有三個返回語句都有不同的條件:返回對象錯誤

private Door pickADoor(){ 
    Random rand = new Random(); 
    int i = rand.nextInt(3); 
    if (i == 2){ 
     return A; 
    } 
    else if (i == 1){ 
     return B; 
    } 
    else if (i == 0){ 
     return C; 
    } 
} 

A,B和C都是預先定義的對象。

+0

a,b,c在哪裏定義?你可以發佈這部分代碼嗎? – osanger

+0

*我的程序似乎不明白我在做什麼* **完全不同意** ...你不明白如何告訴你的程序如何做你需要的東西 –

+0

@JordiCastilla對不起:) –

回答

3

您遺漏了ELSE語句。即使你知道,只有三是可能的,編譯器不知道這一點,這是對你說「有可能在您的方法沒有return語句的情況下,」

所以:

private Door pickADoor(){ 
    Random rand = new Random(); 
    int i = rand.nextInt(3); 
    if (i == 2){ 
     return A; 
    }else if (i == 1){ 
     return B; 
    }else if (i == 0){ 
     return C; 
    }else{ 
     return SOMETHING; //somthing here 
    } 
+1

或者直接刪除'if(i == 0)'並讓'return C'爲默認情況 –

+0

@ ErickG.Hagstrom這是一個解決方案也是如此,但這取決於OP邏輯,對。只有他知道他需要的一切都是猜想。 –

+0

非常正確。但是看看代碼,至少目前至少只有三種可能性。而且,我認爲,這是OP的混亂的根源。 –

0

由於您的方法的返回類型是Door所以,如果沒有條件爲真,那麼它不返回任何東西。所以你需要在方法的最後添加return null;。或者你也可以返回else塊中的其他對象。

+0

null它感謝你! –

+0

樂意幫忙! –

+0

'null'可能是這裏最糟糕的選擇。當然,它會關閉編譯器,但它不會增加可讀性,並且如果實際發生,可能會在某個意外的地方產生一個'NullPointerException'。 –

1

你可以添加一個默認的return語句,因爲沒有辦法確定你的條件之一會在運行時被滿足,這就是編譯器抱怨的原因。

private Door pickADoor(){ 
    Random rand = new Random(); 
    int i = rand.nextInt(3); 
    if (i == 2){ 
     return A; 
    } 
    else if (i == 1){ 
     return B; 
    } 
    else if (i == 0){ 
     return C; 
    } 

    return A ; // some default value 
    } 
+1

或者乾脆刪除if(i == 0),並讓返回C爲默認情況 –