2016-09-18 116 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; 

请注意,我用一对大括号强调陈述体(这将防止进一步的错误),我建议你这样做。