【问题标题】:Missing return statement java缺少返回语句 java
【发布时间】:2017-01-26 05:25:41
【问题描述】:

我有一个 8x8 的单元格网格,可以是真 (1) 或假 (0)。我正在尝试在java中编写一个方法,该方法计算与“col”列和“row”行中指定单元格相邻的真实单元格的数量。 “world”是描述每个单元的初始状态的变量(每个位代表一个单元)。 getCell 是一种返回由其参数指定的单元格的布尔值的方法。我已经测试了 getCell 方法并且它通过了我的所有测试,所以我相信它可以按预期工作。我的代码如下所示:

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;
}

基本上,它应该像这样工作:

  1. 真实邻居的初始数量为0

  2. 然后测试所有周围的单元格,如果其中任何一个为真,则将 numNeighbours 增加 1

  3. 最后返回最后的 numNeighbours

但是,当我尝试遵守它时,我收到一条错误消息,上面写着“错误缺少返回语句”。为什么会这样?据我所知,最后有一个很清楚的return语句。有人可以给我一些建议吗?

非常感谢:)

【问题讨论】:

  • return 语句在最后一个 if 中。尝试在最后一个 if 后面加一个分号。
  • 一些注意事项:(a) 在这里使用花括号会有所帮助,这也是很多人(包括我)喜欢总是使用它们的原因之一。 (b) 你没有-1、-1,但你有两次+1、+1。那是故意的吗? (c) 假设没有,一对嵌套的for 循环在这里不太容易出错。 “对于从 -1 到 +1 的 colDelta,对于从 -1 到 +1 的 rowDelta,如果 getCell,则递增。”它会更清晰、更短、更好

标签: java compiler-errors return


【解决方案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;

请注意,我使用了一对花括号来强调语句主体(这样可以防止进一步的错误),我建议您这样做。

【讨论】:

    【解决方案2】:

    您忘记在最后一个条件中增加 numNeighbours。因此,只有在最后一个条件为真时才会执行您的 return 语句:

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

    改成:

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

    【讨论】:

    • 真是个愚蠢的错误!非常感谢您的帮助!
    猜你喜欢
    • 1970-01-01
    • 2016-06-10
    • 2014-03-01
    • 2014-09-22
    • 2022-01-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-18
    相关资源
    最近更新 更多