If statement 如何返回位于If条件(处理)中的语句

If statement 如何返回位于If条件(处理)中的语句,if-statement,processing,If Statement,Processing,我正在生成一个名为bondPositionCounter的整数,该整数应该基于满足if语句中两个条件之一的条件返回一个整数。但是,即使其中一个条件为真,integer方法始终返回1。没有最后的返回行,我得到一个错误,声称该方法必须返回int类型的东西。为什么 我的代码如下 int bondPositionCounter(int i, int j) { if ((g.grid.cells[i][j].isOccupied == true) && (g.grid.c

我正在生成一个名为bondPositionCounter的整数,该整数应该基于满足if语句中两个条件之一的条件返回一个整数。但是,即使其中一个条件为真,integer方法始终返回1。没有最后的返回行,我得到一个错误,声称该方法必须返回int类型的东西。为什么

我的代码如下

    int bondPositionCounter(int i, int j) { 
    if ((g.grid.cells[i][j].isOccupied == true) && (g.grid.cells[i + 1][j].isOccupied == true)) {
      g.grid.bondsh[i][j].bondUsage = true;
      return 8 * i + j;
    } else if ((g.grid.cells[i][j].isOccupied == true) && (g.grid.cells[i][j + 1].isOccupied == true)) {
      g.grid.bondsv[i][j].bondUsage = true;
      return 56 + 8 * i + j;
    }
    return 1; 
  } 
如果没有最后的返回行,我会得到一个错误,声明该方法 必须返回int类型的内容。为什么

因为当你用返回类型声明一个方法时,一个方法必须返回一些东西

让我们举个例子

现在假设在运行时两个条件都不满足,那么您的方法将返回什么

不知道

,同样的疑问也会出现在编译器身上,这就是为什么编译器只在需要添加返回语句时才给出错误

一条建议

if ((g.grid.cells[i][j].isOccupied == true)
    && (g.grid.cells[i + 1][j].isOccupied == true)) {

}
可以用

if ((g.grid.cells[i][j].isOccupied) 
   && (g.grid.cells[i + 1][j].isOccupied )) {
}

对于一系列if-else-if语句,编译器无法知道它们是否都是false。如果发生这种情况,它将到达方法末尾而不返回值,这违反了它的约定

因此,在这种情况下,只有当两个if条件为false时,才会返回1。它在语义上等同于用一个else子句结束if/else if块,该子句也返回一个值:

int bondPositionCounter(int i, int j) {
    if (...) {
      return valueA;
    } else if (...) {
  return valueB;
    } else {
      return default;
    }
}
在这种情况下,您可以删除独立的return 1,编译器会很高兴。本质上,对于任何具有返回类型的方法,对于所有有效的代码路径,它都必须返回一个值


如果您的目的不是要有一个默认的返回值,您可以改为引发一个异常I'd link,但您不指定语言,您可以是基于代码的C/C++或Java作为默认情况。

对于一系列If-else-If语句,编译器无法知道它们是否都是false。如果发生这种情况,它将到达方法末尾而不返回值,这违反了它的约定。因此,在本例中,只有当两个if为false时,才会返回1。这在语义上相当于用一个返回值的else子句结束if/else if块,在这种情况下,您可以删除独立的return 1,编译器会很高兴的。@aruisdante将其作为答案发布,以便我们可以投票。如果您不希望有默认返回值,你可以提出一个异常链接,但是你不需要指定语言,你可以是C/C++或者Java(基于代码)作为默认情况。
int bondPositionCounter(int i, int j) {
    if (...) {
      return valueA;
    } else if (...) {
  return valueB;
    } else {
      return default;
    }
}