If statement 如何返回位于If条件(处理)中的语句
我正在生成一个名为bondPositionCounter的整数,该整数应该基于满足if语句中两个条件之一的条件返回一个整数。但是,即使其中一个条件为真,integer方法始终返回1。没有最后的返回行,我得到一个错误,声称该方法必须返回int类型的东西。为什么 我的代码如下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
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;
}
}