2016-09-18 179 views
1

我有一個8x8網格的單元格,它可以是真(1)或假(0)。我正在嘗試在java中編寫一個方法,該方法計算列「col」和行「row」中與指定單元格相鄰的真實單元的數量。 「世界」是描述每個單元的初始狀態的變量(每一位代表一個單元)。 getCell是一個返回由其參數指定的單元格的布爾值的方法。我測試了getCell方法,它已通過我所有的測試,所以我相信它可以按預期工作。我的代碼如下所示:缺少返回語句java

public static int countNeighbours(long world, int col, int row){ 
    int numNeighbours = 0;` 

    if(getCell(world,col-1,row-1)) 
     numNeighbours++; 
    if(getCell(world,col,row-1)) 
     numNeighbours++; 
    if(getCell(world,col+1,row+1)) 
     numNeighbours++; 
    if(getCell(world,col-1,row)) 
     numNeighbours++; 
    if(getCell(world,col+1,row)) 
     numNeighbours++; 
    if(getCell(world,col-1,row+1)) 
     numNeighbours++; 
    if(getCell(world,col,row+1)) 
     numNeighbours++; 
    if(getCell(world,col+1,row+1)) 

    return numNeighbours; 
} 

Esentially,它應該像這樣工作:

  1. 真正的鄰居的最初數量爲0

  2. 然後測試所有周圍的細胞,如果有的話它們是真的,它增加numNeighbours由1

  3. 在最後它返回最後numNeighbours

但是,當我嘗試遵守它時,我收到一條錯誤消息,指出「錯誤缺少返回語句」。爲什麼這樣?據我所知,最後有一個很清楚的迴歸聲明。任何人都可以提供我的建議嗎?

非常感謝:)

+0

返回語句在last if裏面。嘗試在最後一個分號後加上分號。 – brijs

+0

一些注意事項:(a)在這裏發佈大括號會有幫助,這是很多人(包括我)喜歡總是使用它們的原因之一。 (b)你沒有-1,-1,但你有+1,+1兩次。那是故意的嗎? (c)假設沒有,一對嵌套'for'循環在這裏不太容易出錯。 「對於從-1到+1的colDelta,對於從-1到+1的rowDelta,如果getCell,則增量。」它會更清晰,更短,更好 – yshavit

回答

3

你忘了在最後一個條件遞增numNeighbours。因此,如果最後一個條件是真實的你return語句只是執行:

if(getCell(world,col+1,row+1)) 

return numNeighbours; 

將其更改爲:

if(getCell(world,col+1,row+1)) 
    numNeighbours++; // added 

return numNeighbours; 
+0

這樣一個愚蠢的錯誤!非常感謝您的幫助! – Jhonny

1

return聲明涉及到最後if聲明:

if(getCell(world,col+1,row+1)) return numNeighbours; 

你最好改變最後的if聲明的主體[1],或者在最後加上另一個return [2]:

// [1] 
if(getCell(world,col+1,row+1)) { 
    // a body 
} 
return numNeighbours; 
... 
// [2] 
if(getCell(world,col+1,row+1)) { 
    return numNeighbours; 
} 
return numNeighbours; 

請注意,我用一對大括號強調陳述體(這將防止進一步的錯誤),我建議你這樣做。