2012-11-26 169 views
2

我有一个方法public int bar(),我已经声明了一个int total(在方法体的c)。因此,这应该是一个simpel局部变量,事情是,日食抱怨本地方法变量,无法识别

Description Resource Path Location Type 
The local variable total may not have been initialized Repository.java /proj_individual/src/repo line 35 Java Problem 

普通的例子:

public int foo(){ 
    int total; 
    for(... : ...){ 
     total += 1; // complains 
    } 
    return total;// complains 
} 

和我的确切代码:

public int getLocatars(){ 
    int total; 
    for (Map.Entry<Apartment, List<Expense>> entry : dic.entrySet()) { 
     if(entry.getKey().isDebt()){ 
      total += entry.getKey().getNrProple(); 
     } 
    } 
    return total; 
} 

我不知道是什么我可能做错了,所以任何想法都有帮助,谢谢。

回答

6

您的变量没有明确赋值,因此您无法读取它。

想象一下,如果您的输入集是空的,或者没有debt条目...您想要返回什么值?

更重要的是,即使它确实进入你的循环内,大多数情况下,你会希望添加到什么初始值?

与静态和实例字段不同,局部变量没有默认值:在读取它们之前,必须为它们分配值。我怀疑你只是想:

int total = 0; 
+0

是啊,可悲的是,这是不直观设计。它适用于字段,但不适用于局部变量。 –

+0

谢谢。 >> cna't相信它没有响铃,不知何故,因为肯定java inits到0 .... –

+0

@FabianLange:我不认为这是不直观的。对于局部变量,编译器*知道有效的执行流。它无法知道是否在即时/静态字段的getter之前调用setter。 –