尝试打印在if中初始化的变量时发生Java错误
我正在尝试打印在if-else语句中初始化的字符串。但是我有一个关于dateStr的错误,可能在最后一行没有初始化。有什么建议吗? 代码如下:尝试打印在if中初始化的变量时发生Java错误,java,string,Java,String,我正在尝试打印在if-else语句中初始化的字符串。但是我有一个关于dateStr的错误,可能在最后一行没有初始化。有什么建议吗? 代码如下: int currentDay = LocalDateTime.now().getDayOfMonth(); int currentMonth = LocalDateTime.now().getMonthValue(); int currentYear = LocalDateTime.now().getYear(); String dateStr; if
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案例,如果没有它,字符串可能无法初始化
否则,将其初始化为默认值,例如null或空字符串:
String dateStr = "";
首先将其初始化为空字符串: 字符串dateStr=
String dateStr= null;
这是因为,如果没有满足任何条件,该怎么办。您声明了一个变量,但没有初始化它。要初始化,您需要这样做
String datestr = "";
您没有初始化dateStr变量,编译器正在抛出错误,因为有可能由于currentDay、currentMonth的值,在运行时不会执行任何if块,条件不满足,那么dateStr变量没有指向任何导致错误的对象,因此,解决此问题有两种选择:
选项1:初始化dateStr变量
选项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";
}
我强烈建议您练习始终正确初始化局部变量。您可能感兴趣的另一点是,与需要初始化的局部变量不同,类/实例变量将自动初始化为默认值,而您不会遇到此问题。并非所有路径都会向变量添加值,请执行此操作
...
else if (currentDay >= 10 && currentMonth >= 10){
dateStr = currentDay + "/" + currentMonth + "/" + currentYear;
} else {
dateStr = "it didn't work!";
}
...
正如@JeanLogeart所说,添加一个else条件将删除您的错误。 尽管如此,我还是会创建一个padding函数来减少对以下条件的需要:
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();
}
是的,您必须将此变量初始化到函数的上下文中,并在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的上下文中,这就是编译器检测到变量datestri未初始化到函数上下文中的原因。当currentDay>=10&¤tMonthThanks时会发生什么!它起作用了
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);