2013-03-23 122 views
0

也许我的问题很蠢,但我无法解决它。无法返回方法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 v = new Velocity(CartesianCoordinate(x,y)); 
     v.x = sumX; 
     v.y = sumY; 
     vel = v; 
    } 

    if(velocity.getClass().equals(p)) 
    { 
     do something... 
    } 
    return vel; 
} 

任何一个可以告诉我为什么我不能回到“VEL”,我不想创建一个类变量...

回答

2

任何一个可以告诉我为什么不能返回“vel”

当然 - 如果你的条件都不正确,你还没有给它一个值。该变量不是明确指定为,因此您无法读取其值以返回它。 想要在这种情况下返回什么?它甚至有效吗?也许你应该在这种情况下抛出异常。

就我个人而言,我实际上会返回if块的每一个块 - 我不认为本地变量会增加任何好处。在这一点上,这将是比较明显的什么是错的:

public Velocity add(final Velocity velocity) { 
    if (...) { 
     ... 
     return ...; 
    } 
    if (...) { 
     ... 
     return ...; 
    } 
    // What should we do if we get here? 
} 

现在,您的两个条件,确定返回值只是立即返回它,它是更明显(IMO),如果你到了底部,这是因为这两个条件都没有评估为true ...所以要么返回一些“空”值,要么返回一个空引用,或者抛出一个异常。

当然,这是假设你不希望第二个条件有效地打败第一个,它现在做的 - 如果两个条件都是真的,那么在第一个块中设置的值可能是不相关的,因为它将被第二个块覆盖。

目前还不清楚CartesianCoordinate是做什么的,但是它的命名方式很古怪 - 如果它返回Class<?>那肯定很奇怪。什么是p在这里?我不知道你的真实代码是否与此有所不同,但即使除了不能编译的原因之外,它对我来说也是可恶的。

+0

如果我把“return v”放在IF语句中,我得到的错误是我的方法没有返回......这就是创建局部变量的原因...... – Gudron 2013-03-23 20:14:23

+0

@RuslanZarinaSeidovi:好吧,不是它有*没有*返回 - 你会得到一个错误报告返回语句是* missing *,因为你可以在不返回任何东西的情况下结束方法。如果你得到那么多,你想要发生什么?你*要么*必须返回一些东西,*或*抛出异常。 – 2013-03-23 20:15:40

1

局部变量没有默认值,应该初始化。

如果val是一个实例字段或一个静态字段,并且没有初始化,那么它在访问它时将返回默认值。

+0

谢谢。我只是把它等于空,它的作品... – Gudron 2013-03-23 20:16:10

+3

@RuslanZarinaSeidovi:它*编译* - 但这不是一样的*工作*。不要盲目地做这件事 - 思考它意味着什么,以达到方法的最终目的,而不会遇到任何一种情况,以及在这种情况下你想要发生的事情。 – 2013-03-23 20:16:41

0

您只能使用值返回变量。因此val没有一个可能的情况。

的easies办法来解决,这是直接在声明初始化val

Velocity vel = null; //or 
Velocity vel = new Velocity(); 

,或者您需要在那里vel也被初始化为else分支添加到您的if声明。

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(); 
}