Can';t返回java方法内部的值
也许我的问题很愚蠢,但我解决不了 这是我的密码:Can';t返回java方法内部的值,java,Java,也许我的问题很愚蠢,但我解决不了 这是我的密码: public Velocity add(final Velocity velocity) { Velocity vel; if(velocity.getClass().equals(CartesianCoordinate(x, y))) { double sumX = x + velocity.x; double sumY = y + velocity.y; Velocity
public Velocity add(final Velocity velocity)
{
Velocity vel;
if(velocity.getClass().equals(CartesianCoordinate(x, y)))
{
double sumX = x + velocity.x;
double sumY = y + velocity.y;
Velocity v = new Velocity(CartesianCoordinate(x,y));
v.x = sumX;
v.y = sumY;
vel = v;
}
if(velocity.getClass().equals(p))
{
do something...
}
return vel;
}
谁能告诉我为什么我不能返回“vel”,我不想创建一个类变量
有人能告诉我为什么我不能返回“vel”吗
当然-如果两个条件都不是真的,那么你没有给它一个值。变量没有明确赋值,因此无法读取其值以返回它。如果那样的话,你想退货什么?它甚至有效吗?在这种情况下,也许您应该抛出一个异常
就个人而言,我实际上会从每个if
块返回-我不认为局部变量会增加任何好处。在这一点上,问题将更加明显:
public Velocity add(final Velocity velocity) {
if (...) {
...
return ...;
}
if (...) {
...
return ...;
}
// What should we do if we get here?
}
现在,确定返回值的两个条件都只是立即返回,更明显的是(IMO),如果你到达底部,那是因为这两个条件都没有计算为true
。。。因此,要么返回一些“空”值,要么返回空引用,要么抛出异常
当然,这是假设您不希望第二个条件有效地胜过第一个条件,它现在就是这样做的-如果两个条件都为真,那么第一个块中设置的值可能是无关的,因为它将被第二个块覆盖
还不清楚cartesiancoordination
做了什么,但它的名字很奇怪,是用Java方法命名的——如果它返回类,那肯定很奇怪。这里的p
是什么?我不知道您的真实代码是否与此有所不同,但即使撇开无法编译的原因不谈,我还是觉得它有点可疑
有人能告诉我为什么我不能返回“vel”吗
当然-如果两个条件都不是真的,那么你没有给它一个值。变量没有明确赋值,因此无法读取其值以返回它。如果那样的话,你想退货什么?它甚至有效吗?在这种情况下,也许您应该抛出一个异常
就个人而言,我实际上会从每个if
块返回-我不认为局部变量会增加任何好处。在这一点上,问题将更加明显:
public Velocity add(final Velocity velocity) {
if (...) {
...
return ...;
}
if (...) {
...
return ...;
}
// What should we do if we get here?
}
现在,确定返回值的两个条件都只是立即返回,更明显的是(IMO),如果你到达底部,那是因为这两个条件都没有计算为true
。。。因此,要么返回一些“空”值,要么返回空引用,要么抛出异常
当然,这是假设您不希望第二个条件有效地胜过第一个条件,它现在就是这样做的-如果两个条件都为真,那么第一个块中设置的值可能是无关的,因为它将被第二个块覆盖
还不清楚cartesiancoordination
做了什么,但它的名字很奇怪,是用Java方法命名的——如果它返回类,那肯定很奇怪。这里的p
是什么?我不知道您的实际代码是否与此有所不同,但即使不考虑此代码无法编译的原因,我也觉得它有点可疑。局部变量没有默认值,应该初始化
如果val
是实例字段或静态字段且未初始化,则访问时将返回默认值。局部变量没有默认值,应初始化
如果val
是实例字段或静态字段且未初始化,则访问时将返回默认值。只能返回带有值的变量。因此,val
可能没有一个
解决此问题的简单方法是直接在声明上初始化val
:
Velocity vel = null; //or
Velocity vel = new Velocity();
或者您需要将else
分支添加到if
语句中,其中vel
也已初始化
if(velocity.getClass().equals(CartesianCoordinate(x, y)))
{
double sumX = x + velocity.x;
double sumY = y + velocity.y;
Velocity v = new Velocity(CartesianCoordinate(x,y));
v.x = sumX;
v.y = sumY;
vel = v;
}else{
vel = null;//or
vel = new Velocity();
}
只能返回带有值的变量。因此,val
可能没有一个
解决此问题的简单方法是直接在声明上初始化val
:
Velocity vel = null; //or
Velocity vel = new Velocity();
或者您需要将else
分支添加到if
语句中,其中vel
也已初始化
if(velocity.getClass().equals(CartesianCoordinate(x, y)))
{
double sumX = x + velocity.x;
double sumY = y + velocity.y;
Velocity v = new Velocity(CartesianCoordinate(x,y));
v.x = sumX;
v.y = sumY;
vel = v;
}else{
vel = null;//or
vel = new Velocity();
}
若我把“return v”放在If语句中,我得到的错误是我的方法并没有返回。。。这就是创建局部变量的原因…@RuslanZarinaSeidovi:并不是因为它没有返回-您将得到一个错误报告,返回语句丢失,因为您可以在不返回任何内容的情况下到达方法的末尾。如果你走了那么远,你想发生什么?你要么返回一些东西,要么抛出一个异常。如果我把“return v”放在If语句中,我得到的错误是我的方法没有返回。。。这就是创建局部变量的原因…@RuslanZarinaSeidovi:并不是因为它没有返回-您将得到一个错误报告,返回语句丢失,因为您可以在不返回任何内容的情况下到达方法的末尾。如果你走了那么远,你想发生什么?您要么必须返回某些内容,要么抛出异常。@RuslanZarinaSeidovi:它可以编译,但这与它的工作方式不同。不要盲目地这样做——想想在没有达到任何一个条件的情况下结束方法意味着什么,以及在这种情况下你希望发生什么。@RuslanZarinaSeidovi:它是编译的——但这与它的工作方式不同。不要盲目地这样做——想想在没有达到任何一个条件的情况下完成方法意味着什么,以及在这种情况下你希望发生什么。