繁体   English   中英

没有其他的多个if语句

[英]multiple if statements without else

我不明白为什么会出现编译错误。 在我看来,此方法首先评估n是否>0。在这种情况下,将把“ good”分配给本地的String对象。 但是,如果不是这种情况,那么它将不会做任何事情。 接下来,该方法进入另一个决策构造。 这次,它将评估n <=0。如果是,它将为String对象分配“ bad”。

在这两种情况下,都应初始化local。 但是,出现编译错误,编译器说可能未初始化。 我不知道这是从哪里来的。

请注意,我知道如何通过用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);
}

编译器无法“知道”您是否已使用if语句处理了所有情况。

考虑以下示例(请注意,第二个if小于):

String local;
if(n > 0)
    local = "good";
if(n < 0)
    local = "bad";

如果n = 0 ,则不会定义local

编译器不会测试您的if语句,以查看它们是否在编译时处理所有情况。

如前所述,将其更改为if/else将解决该错误。 您还可以像其他用户指出的那样初始化变量。

问题是,如果n 不大于 0且不小于或等于 0 ,则不会初始化var local 这就是编译器告诉您的内容。

您可以通过使用一些local变量来解决此问题。

String local = "";

当您使用else时,此问题得以解决,因为对于编译器而言,只能有2种可能的状态,一个条件为true ,否则为3,因为else考虑了所有条件,所以没有可能的第三种状态。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM