2016-07-06 118 views
2

我知道我可以使用日期格式化程序,但我試圖學習。從掃描儀獲取輸入並生成有效日期

我試圖從Scanner採取格式mm/dd/yyyy的日期。當我爲這個月採取投入時,我遇到了麻煩。例如,如果我想要一月份,請按01並且monthInt將其轉換爲1而不是01

我也有我的一天的麻煩。當我輸入有效日期時,它會一直說無效的日期。我的if聲明搞砸了嗎?如果你需要更多解釋,請問。感謝您的時間!

我的代碼:

System.out.println("Enter a date in the format mm/dd/yyyy"); 
    String mm; 
    String dd; 
    String yyyy; 
    String January = null; 
    String February = null; 
    String March = null; 
    String April = null; 
    String May = null; 
    String June = null; 
    String July = null; 
    String August = null; 
    String September = null; 
    String October = null; 
    String November = null; 
    String December = null; 
    String month = null; 
    String date = null; 

    Scanner keyboard = new Scanner(System.in); 

    date = keyboard.next(); 
    if (date.length() != 10) { 
     System.out.println("Format of date is wrong"); 
    } 
    if (date.charAt(2) != '/') { 
     System.out.println("Must have/after mm"); 
    } 
    if (date.charAt(5) != '/') { 
     System.out.println("Must have/after dd"); 
    } 

    else if (date.length() == 10 && date.charAt(2) != '/' && date.charAt(5) != '/') { 
     System.out.println(date + " date is valid"); 
    } 

    mm = date.substring(0, 1); 
    int monthInt = Integer.parseInt(mm);   

    if (monthInt == 1) { 
     month = January; 
    } else if (monthInt == 2) { 
     month = February; 
    } else if (monthInt == 3) { 
     month = March; 
    } else if (monthInt == 4) { 
     month = April; 
    } else if (monthInt == 5) { 
     month = May; 
    } else if (monthInt == 6) { 
     month = June; 
    } else if (monthInt == 7) { 
     month = July; 
    } else if (monthInt == 8) { 
     month = August; 
    } else if (monthInt == 9) { 
     month = September; 
    } else if (monthInt == 10) { 
     month = October; 
    } else if (monthInt == 11) { 
     month = November; 
    } else if (monthInt == 12) { 
     month = December; 
    } else { 
     System.out.println("Invalid Month"); 
    } 

    if (monthInt < 0 || monthInt > 12) { 
     System.out.println("Invalid month"); 
    } 

    dd = date.substring(3, 4); 
    int dayInt = Integer.parseInt(dd); 

    if (monthInt == 1 || monthInt == 3 || monthInt == 5 || monthInt == 7 || monthInt == 8 || monthInt == 10 
      || monthInt == 12 && dayInt < 0 && dayInt > 31) { 
     System.out.println("Invalid day"); 
    } 

    if (monthInt == 4 || monthInt == 6 || monthInt == 9 || monthInt == 11 
      && dayInt < 0 && dayInt > 30) { 
     System.out.println("Invalid day"); 

    } 
    if (monthInt == 2 && dayInt < 0 && dayInt > 28){ 
     System.out.println("Invalid day"); 
    } 
+0

哪幾天和這幾個月是ü得到錯誤? – DarkV1

+0

刪除所有'String monthName = null'東西。它很混亂,沒有必要。相反,使用引號括住你的'month = monthName'代碼,使其成爲一個真正的字符串(例如'month =「January」') – Confiqure

回答

3

你如果在天無效檢查陳述是不正確的。它應該是這樣的:

if ((monthInt == 1 || monthInt == 3 || monthInt == 5 || monthInt == 7 || monthInt == 8 || monthInt == 10 || monthInt == 12) && (dayInt <= 0 || dayInt > 31)) { 
    System.out.println("Invalid day"); 
} 

if ((monthInt == 4 || monthInt == 6 || monthInt == 9 || monthInt == 11) && (dayInt <= 0 || dayInt > 30)) { 
    System.out.println("Invalid day"); 
} 

if (monthInt == 2 && (dayInt <= 0 || dayInt > 28)) { 
    System.out.println("Invalid day"); 
} 

注意,dayInt < 0聲明改爲dayInt <=0因爲0每天INT也無效。

這裏的關鍵在於,如果它是給定月份之一,並且該月份的日期範圍之外,您希望它成爲無效的一天。因此,如果使用的形式爲if(month1 OR month2 etc) AND (outsiderange1 OR outsiderange2),則使用化合物。

+0

@ DarkV1我不好意思我在想C#。編輯。 – nhouser9

+0

這應該解決第二個問題。 +1 – DarkV1

+1

僅供參考,這不會檢查二月份的閏日。 –

0

貌似問題是在這裏:

mm = date.substring(0, 1);

它從日期字符串的第一個字符,所以如果你輸入「01」代表一月,它會採取「0」,所以monthInt會爲0,你會得到「無效的月份」錯誤。如果你想獲得兩個字符,則需要使用日期存在mm = date.substring(0, 2);

同樣的問題,你需要dd = date.substring(3, 5);