2010-10-16 90 views
1

我試圖編寫一個方法,通過對象的數組來查看某個顏色​​,這也是一個對象。通過對象數組查看

public Ghost findFirst(Color c){ 
     for (int i=0;i<ghosts.length;i++) { 
      if (ghosts[i].getColor()==c) 
      return ghosts[i]; 
     else 
      return null; 
      } 
    } 

因此,如果某個幽靈的顏色與顏色c相匹配,然後返回那個幽靈。但是,我收到了一個針對i ++的死代碼警告。我的代碼有什麼問題?哦,我也得到一個方法錯誤,說這個函數應該返回一個鬼。我以爲我是?

+1

嘗試正確縮進代碼,然後你會看到自己。但基本上,你打敗你的for循環,如果第一種顏色不是你要找的,你是返回null,甚至沒有看所有其他顏色。 – 2010-10-16 20:57:04

+1

正如我早些時候回答的那樣,在比較Color對象時需要使用equals()。 – BoltClock 2010-10-16 21:02:21

回答

7

因爲你在第一次迭代時從循環中返回!所以「我」永遠不會增加。要麼完全刪除else塊,要麼將「返回null」更改爲「continue」。

作爲一個單獨的點,==正在檢查引用相等性,而不是對象相等性。這很可能,你應該使用,而不是因爲

+0

哦,我明白了......但我該如何解決這個問題? – Snowman 2010-10-16 20:59:34

+0

我已經修改了我的答案。作爲一個興趣點,什麼是給你的死代碼警告?你騎?你在用哪個? – 2010-10-16 21:01:30

+0

雅我修復了.equals的東西。我正在使用eclipse,而且我的++是高亮黃色的,並帶有死代碼警告。如果沒有發現任何東西,我會得到指示返回null。我怎麼能仍然在我的情況下實現null? – Snowman 2010-10-16 21:03:35

2

else 
    return null; 

「.equals」!

因爲那個return-Statement你的循環只會被執行一次。

2
public Ghost findFirst(Color c){ 
    for (int i=0; i < ghosts.length; i++) { 
     if (ghosts[i].getColor().equals(c)) 
      return ghosts[i]; 
    } 
    return null; 
} 
3

固定碼:

public Ghost findFirst(Color c){ 
     for (int i=0;i<ghosts.length;i++) { 
      if (ghosts[i].getColor().equals(c)) 
       return ghosts[i]; 
     } 
     return null; 
    } 

記住return終止函數(包括明顯的循環)。所以如果你找到了正確的顏色幽靈 - 你將它歸還(因此結束你的搜索並且永遠不會到達return null;線)。如果你的for循環沒有找到 - 你到最後一行並返回null。

+0

哦,好吧,我不知道返回結束了一個循環。在我上面的修復中使用了一個更加複雜的方法,使用布爾值,這可能不需要 – Snowman 2010-10-16 21:11:03

+0

@Ishtar - 你是對的,在編輯中進行編輯。 – 2010-10-16 21:19:09

1

如果我展開'你的循環,代碼確實是這樣的:

public Ghost findFirst(Color c){ 
    if (ghosts[0].getColor()==c) 
     return ghosts[0]; 
    else 
     return null; 

    if (ghosts[1].getColor()==c) 
     return ghosts[1]; 
    else 
     return null; 

    if (ghosts[2].getColor()==c) 
     return ghosts[2]; 
    else 
     return null; 
    //etc... 
} 

應該從這個明確的,它永遠不會達到第二if,那麼返回(跳出功能)第一個if,對或錯。

0

您的多個return可能是一個問題。有時它可以簡化一個return

public Ghost findFirst(Color c) { 
    Color color = null; 
    for (int i=0;i<ghosts.length;i++) { 
     if (ghosts[i].getColor().equals(c)) 
     color = ghosts[i]; 
    } 
    return color; 
}