这个问题在这里已有答案:
我正在尝试打印在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);
你错过了一个else
案件没有你的String
may not have been initialized
。
否则将其初始化为默认值,例如null
或空字符串:
String dateStr = "";
你没有初始化dateStr
变量,编译器抛出错误,因为有可能你的if
块没有在运行时执行(因为currentDay
,currentMonth
的值,条件不符合),然后是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";
}
我强烈建议您进行练习以始终正确初始化局部变量。您可能感兴趣的另一点是,您将不会遇到类/实例变量的问题,这些变量将自动初始化为默认值(与您需要初始化的局部变量不同)。
首先将其初始化为空字符串:
String dateStr =“”;
String dateStr= null;
那是因为,如果没有满足条件怎么办。
是的,您必须将此变量初始化为函数的上下文并使用到else
和if
中,如下所示:
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);
正如您所做的那样,您只需将变量初始化为if
或else if
的上下文,这就是编译器检测到变量dateStr
未初始化为函数上下文的原因。
您声明了一个变量但没有初始化它。要初始化,您需要这样做
String datestr = "";
并非所有路径都为变量添加值,请执行此操作
...
else if (currentDay >= 10 && currentMonth >= 10){
dateStr = currentDay + "/" + currentMonth + "/" + currentYear;
} else {
dateStr = "it didn't work!";
}
...
正如@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();
}
当currentDay> = 10 && currentMonth <10 ??时会发生什么?务必检查所有案例。同时尝试将街道初始化为空。 String s =“”;