2013-03-23 158 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(); 
}