我不明白为什么会出现编译错误。在我看来,这种方法首先评估n是否>在这种情况下,那么&#34;好&#34;将被分配给String对象本地。但是,如果不是这样,那么它将不会做任何事情。接下来,该方法进入另一个决策构造。这次,它评估n <= 0。如果是,它将分配&#34;坏&#34;到String对象。
在任何两种情况下,都应初始化本地。但是,我收到编译错误,编译器说它可能没有初始化。我不明白这是从哪里来的。
请注意,我知道如何通过用else替换它并删除布尔条件来纠正第二个。我只是不明白为什么在语法意义上这是不正确的。
public class Donkey{
String s1 = "green";
public void generateReport(int n){
String local;
if(n > 0)
local = "good";
if(n <= 0)
local = "bad";
System.out.println(local);
}
答案 0 :(得分:3)
编译器无法知道&#39;您已使用if
语句处理了所有案例。
考虑这个例子(注意第二个if
小于):
String local;
if(n > 0)
local = "good";
if(n < 0)
local = "bad";
如果n = 0
,则local
将无法定义。
编译器不会测试您的if
语句,以查看它们是否在编译时处理所有情况。
将其更改为if/else
将修复您提到的错误。您也可以像其他用户指出的那样初始化变量。
答案 1 :(得分:0)
问题是如果n
不大于 1>}并且小于或等于而不是0
var 0
未初始化。这就是编译器告诉你的。
您可以通过使用某些内容初始化local
var来解决此问题。
local
使用String local = "";
时问题就解决了,因为编译器只能有两种可能的状态,如果条件为 true ,另一种情况如果不是,则存在没有可能的第三种状态,因为else
考虑了所有。