2014-03-18 37 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在这些变量的情况下,他们会如规范所说,只是初始化它们是否是类或实例变量或数组组件。如果这些变量是局部变量,那么它们不会自动初始化并且必须由程序员初始化。否则,程序将不能编译。这就是为什么我说你的答案部分正确。 –