尝试打印if中初始化的变量时出现Java错误

时间:2017-04-05 17:48:13

标签: java string

我正在尝试打印在if-else语句中初始化的String。但我有一个关于dateStr的错误可能没有在最后一行初始化。有什么建议吗? 这是代码:

int currentDay = LocalDateTime.now().getDayOfMonth();
int currentMonth = LocalDateTime.now().getMonthValue();
int currentYear = LocalDateTime.now().getYear();
String dateStr;
if (currentDay < 10 && currentMonth < 10){
    dateStr = "0" + currentDay + "/0" + currentMonth + "/" + currentYear;
} else if (currentDay < 10 && currentMonth >= 10) {
    dateStr = "0" + currentDay + "/" + currentMonth + "/" + currentYear;
} else if (currentDay >= 10 && currentMonth >= 10){
    dateStr =  currentDay + "/" + currentMonth + "/" + currentYear;
}
System.out.println(dateStr);

9 个答案:

答案 0 :(得分:3)

您没有初始化dateStr变量,并且编译器抛出错误,因为可能会导致您的if块没有在运行时执行(因为currentDaycurrentMonth的值,不满足条件),然后dateStr变量没有指向任何,这导致错误,所以,有两种方法可以解决这个问题:

选项(1):初始化dateStr变量

String dateStr = null;

选项(2):添加else条件,如下所示:

    if (currentDay < 10 && currentMonth < 10){       
        dateStr = "0" + currentDay + "/0" + currentMonth + "/" + currentYear;
    } else if (currentDay < 10 && currentMonth >= 10) { 
        dateStr = "0" + currentDay + "/" + currentMonth + "/" + currentYear;
    } else if (currentDay >= 10 && currentMonth >= 10){ 
        dateStr =  currentDay + "/" + currentMonth + "/" + currentYear;
    } else {
        dateStr="INVALID";
    }

我强烈建议你练习始终正确初始化局部变量。您可能感兴趣的另一点是,您将不会遇到类/实例变量的问题,这些变量会自动初始化为默认值(与您需要初始化的局部变量不同)。

答案 1 :(得分:2)

您错过了else案例String may not have been initialized

否则将其初始化为默认值,例如null或空字符串:

String dateStr = "";

答案 2 :(得分:2)

首先将其初始化为空字符串:

String dateStr =&#34;&#34 ;;

答案 3 :(得分:2)

String dateStr= null;

那是因为,如果没有满足任何条件,那该怎么办。

答案 4 :(得分:2)

是的,您必须将此变量初始化为函数的上下文并使用elseif,如下所示:

String dateStr = "";
if (currentDay < 10 && currentMonth < 10){
    dateStr = "0" + currentDay + "/0" + currentMonth + "/" + currentYear;
} else if (currentDay < 10 && currentMonth >= 10) {
    dateStr = "0" + currentDay + "/" + currentMonth + "/" + currentYear;
} else if (currentDay >= 10 && currentMonth >= 10){
    dateStr =  currentDay + "/" + currentMonth + "/" + currentYear;
}
System.out.println(dateStr);

正如您所做的那样,您只需将变量初始化为ifelse if的上下文,这就是编译器检测到变量dateStr未初始化为功能背景。

答案 5 :(得分:1)

您声明了一个变量,但没有对其进行初始化。要初始化,您需要这样做

    String datestr = "";

答案 6 :(得分:1)

并非所有路径都为变量添加值,请执行此操作

...
 else if (currentDay >= 10 && currentMonth >= 10){ 
        dateStr =  currentDay + "/" + currentMonth + "/" + currentYear;
    } else {
        dateStr = "it didn't work!";
}
...

答案 7 :(得分:1)

正如@JeanLogeart所述,添加else条件会删除您的错误。 虽然,我会创建一个填充函数来减轻像这样的条件的需要:

private String padThatNumber(int number, int numberOfDigits){
    StringBuilder sb= newStringBuilder();
    sb.append(Integer.toString(number));
    while(sb.length()<numberOfDigits){
        sb.insert(0, "0");
    }

    return sb.toString();
}

答案 8 :(得分:0)

当currentDay&gt; = 10&amp;&amp; currentMonth&LT; 10 -5务必检查所有案例。同时尝试将街道初始化为空。 String s =&#34;&#34 ;;