有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

编译器错误缺少返回语句java

我有一个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

然而,当我试图遵守它时,我会收到一条错误消息,上面写着“error missing return statement”。为什么会这样?据我所知,最后有一个非常明确的返回声明。谁能给我一些建议吗

非常感谢:)


共 (2) 个答案

  1. # 1 楼答案

    您的return语句与最后一个if语句相关:

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

    您最好更改最后一个if语句[1]的主体,或者在[2]的末尾添加另一个return

    // [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. # 2 楼答案

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

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

    将其更改为:

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