2017-04-05 114 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 =「」;