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

问题描述 投票:0回答:9

我正在尝试打印在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);
java string
9个回答
2
投票

你错过了一个else案件没有你的String may not have been initialized

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

String dateStr = "";

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";
    }

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


2
投票

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

String dateStr =“”;


2
投票
String dateStr= null;

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


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未初始化为函数上下文的原因。


1
投票

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

    String datestr = "";

1
投票

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

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

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();
}

0
投票

当currentDay> = 10 && currentMonth <10 ??时会发生什么?务必检查所有案例。同时尝试将街道初始化为空。 String s =“”;

© www.soinside.com 2019 - 2024. All rights reserved.