2014-03-18 31 views
1

我很困惑返回所需的值。這裏是我的代碼的一部分:返回所需的值 - Java

public class StrNum { 

    public static int getInt(String input) {   
     String str = new String(input); 
     int result; 

     if (str.startsWith("b")) { 
      str = str.substring(1); 
      result = Integer.parseInt(str, 2); 
     } 
     else if (str.startsWith("x")) { 
      str = str.substring(1); 
      result = Integer.parseInt(str, 16); 
     } 

現在,我需要返回的結果。當我寫return result;時,它要求我初始化變量(並且我知道它沒有被初始化)。當我在if語句中使用return result時,Eclipse告訴我必須返回一個值。 我在哪裏愚蠢在這裏?我會很感激一個很好的解釋。

+2

int result = 0; –

+0

你應該用小寫字符開始你的變量。 –

回答

5

如果Str既不以"b""x"開頭也不會返回getInt()方法getInt()?這將是一個錯誤,因爲result未被初始化。您也可以用一個價值intializing result解決這個問題,你想在這種情況下返回:

int result = -1; // for example 

編輯:

既然你想使用input以確定號碼將被解析爲二進制或十六進制,我會建議你在基地10默認添加其他語句解析數:

if (...) 
    // ... 
else if (...) 
    // ... 
else 
    result = Integer.parseInt(Str); 

注意:

  • 請嘗試遵循Java命名約定。對變量/方法使用someVar之類的名稱,對類使用名稱SomeClass
  • 沒有必要創建一個新的字符串實例Str,除非您打算稍後以相同的方法使用原始輸入。
  • 要創建具有相同內容的String,你可以簡單地做

    String str = input;

+0

因此,我必須將「結果」初始化爲不符合條件的值? – user3383621

+2

@ user3383621如Christian所示,將其初始化爲「-1」意味着您可以測試何時無法獲得所需的值。換句話說,你可以使用'if(result == -1)System.out.println(「你搞砸了。」);'。您必須將結果初始化爲某種內容,否則將無法正常工作。請記住,'-1'僅僅是一個例子,你可以將它初始化爲你希望用來檢查錯誤的任何值。 –

+0

謝謝,現在我明白了。 – user3383621

1

你可以,或從ifelse返回結果,也,只要你不是在做後,額外的計算else區塊。

或者乾脆初始化result = 0,它會在你返回之前改變。

1

嘗試

int result = 0; 您必須在返回之前或者換句話說,這樣做的結果初始化變量=。無論您的應用程序採用哪種代碼路徑,都必須初始化變量始終爲

+0

這是部分正確的。實例和類變量會自動初始化爲0或null或等效值。 –

+0

請糾正我,如果我錯了,但如果該變量有一個默認值,並沒有另外定義它將被視爲初始化,因爲它被設置爲其默認值。 – user2277362

+0

不確定你的意思是'具有默認值的變量'。我假設你指的是這個:http://docs.oracle.com/javase/specs/jls/se7/html/jls-4.html#jls-4.12.5在這些變量的情況下,他們會如規範所說,只是初始化它們是否是類或實例變量或數組組件。如果這些變量是局部變量,那麼它們不會自動初始化並且必須由程序員初始化。否則,程序將不能編譯。這就是爲什麼我說你的答案部分正確。 –