Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/327.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
尝试打印在if中初始化的变量时发生Java错误_Java_String - Fatal编程技术网

尝试打印在if中初始化的变量时发生Java错误

尝试打印在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

我正在尝试打印在if-else语句中初始化的字符串。但是我有一个关于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案例,如果没有它,字符串可能无法初始化

否则,将其初始化为默认值,例如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);