2017-04-05 79 views
0

我试图打印在if-else语句内初始化的字符串。但我有一个dateStr错误可能没有在最后一行初始化。任何建议? 这是代码:尝试打印一个变量时尝试打印一个变量时发生Java错误

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

回答

2

你缺少一个else情况下,没有这些你Stringmay not have been initialized

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

String dateStr = ""; 
+0

谢谢!有效 –

2

初始化为空字符串第一:

字符串dateStr = “”;

2
String dateStr= null; 

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

1

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

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

我强烈建议你进行练习,以始终正确初始化本地变量。另一点你可能会感兴趣的是你不会面临这个问题类/实例变量,它会自动初始化为默认值(不像你需要初始化的局部变量)。

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(); 
} 
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未初始化到的功能方面的原因。

0

当currentDay> = 10时会发生什么& & currentMonth < 10 ??确保检查所有情况。也尝试初始化街道清空。 String s =“”;