没有else的多个if语句

时间:2017-02-14 19:23:03

标签: java if-statement

我不明白为什么会出现编译错误。在我看来,这种方法首先评估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);
}

2 个答案:

答案 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 不大于 }并且小于或等于而不是0 var 0未初始化。这就是编译器告诉你的。

您可以通过使用某些内容初始化local var来解决此问题。

local

使用String local = ""; 时问题就解决了,因为编译器只能有两种可能的状态,如果条件为 true ,另一种情况如果不是,则存在没有可能的第三种状态,因为else考虑了所有。