我如何 Return 位于 If 条件语句中的语句(处理)
How Do I Return Statements Located in If Conditionals (Processing)
我正在创建一个名为 bondPositionCounter 的整数,它应该 return 一个基于满足 if 语句中两个条件之一的条件的整数。但是,即使其中一个条件为真,整数方法总是 returns 1。如果没有最后的 return 行,我会收到一条错误消息,声称该方法必须 return 某种类型诠释。这是为什么?
我的代码如下。
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;
}
Without the final return line, I get an error claiming that the method
must return something of type int. Why is that?
因为当您使用 return 类型声明方法时,方法必须 return 某些东西
举个例子
public int checkHowReturnStatementWorks(){ // this method will return int
if(condition a){ // condition going to be resolved at runtime
return 1;
}
else if(condition b){
return 2;
}
}
现在假设在运行时这两个条件都不满足那么你的方法将 return ,
no idea
,编译器也有同样的疑问,这就是为什么编译器在编译时给出错误,只是你需要添加一个 return 语句。
一条建议
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
语句的情况下,编译器无法知道它们是否全部为假。如果发生这种情况,它将在没有 returning 值的情况下到达方法的末尾,这违反了其约定。
因此,在这种情况下,只有当您的两个 if
条件为 false
时,您的 return 1
才会发生。这在语义上等同于以 else
子句结束 if/else if
块,该子句也 return 编辑了一个值:
int bondPositionCounter(int i, int j) {
if (...) {
return valueA;
} else if (...) {
return valueB;
} else {
return default;
}
}
在这种情况下,您可以删除独立的 return 1,编译器会很高兴。本质上,对于具有 return 类型的任何方法, 对于所有有效代码路径 它必须 return 一个值。
如果您的意图不是要有默认的 return 值,您可以改为引发异常(我会 link,但您没有指定语言,您可以C/C++ 或 Java 基于代码)作为默认情况。
我正在创建一个名为 bondPositionCounter 的整数,它应该 return 一个基于满足 if 语句中两个条件之一的条件的整数。但是,即使其中一个条件为真,整数方法总是 returns 1。如果没有最后的 return 行,我会收到一条错误消息,声称该方法必须 return 某种类型诠释。这是为什么?
我的代码如下。
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;
}
Without the final return line, I get an error claiming that the method must return something of type int. Why is that?
因为当您使用 return 类型声明方法时,方法必须 return 某些东西
举个例子
public int checkHowReturnStatementWorks(){ // this method will return int
if(condition a){ // condition going to be resolved at runtime
return 1;
}
else if(condition b){
return 2;
}
}
现在假设在运行时这两个条件都不满足那么你的方法将 return ,
no idea
,编译器也有同样的疑问,这就是为什么编译器在编译时给出错误,只是你需要添加一个 return 语句。
一条建议
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
语句的情况下,编译器无法知道它们是否全部为假。如果发生这种情况,它将在没有 returning 值的情况下到达方法的末尾,这违反了其约定。
因此,在这种情况下,只有当您的两个 if
条件为 false
时,您的 return 1
才会发生。这在语义上等同于以 else
子句结束 if/else if
块,该子句也 return 编辑了一个值:
int bondPositionCounter(int i, int j) {
if (...) {
return valueA;
} else if (...) {
return valueB;
} else {
return default;
}
}
在这种情况下,您可以删除独立的 return 1,编译器会很高兴。本质上,对于具有 return 类型的任何方法, 对于所有有效代码路径 它必须 return 一个值。
如果您的意图不是要有默认的 return 值,您可以改为引发异常(我会 link,但您没有指定语言,您可以C/C++ 或 Java 基于代码)作为默认情况。