2016-11-26 96 views
-1

嘿,我有這個while循環,它檢查用戶輸入的日期的有效輸入。我需要在這個while循環中添加一個檢查,如果它不是閏年的一天不能超過28,並且如果它是閏年,那麼不能超過29,如果month是二月,意味着month = 2。在while循環中爲閏年添加日期檢查

我該怎麼辦呢?我知道,要檢查它是否是閏年,我使用以下語句:if ((year%4 == 0 && year%100 !=0) || (year%400 == 0))

這裏是我的循環:

while ((day>31 || day<=0) || (month>12 || month<=0) || (year<=0))   
    {                    
    System.out.println("The original date/month/year is invaild"); 
    System.out.println("Please enter 3 integers to represent a valid date:"); 
    day = scan.nextInt(); 
    month = scan.nextInt(); 
    year = scan.nextInt(); 
    } 

順便說一句,我不能使用任何方法或類,這是一個家庭作業。

+2

當你說你「不能使用任何方法或類」 - 大概你可以寫你自己的*方法,不是嗎?這就是我要做的 - 不要試圖把所有東西都放在一個巨大的條件下,而是寫一個'isValidDate(int year,int month,int day)'方法。 –

+0

使用日曆可以獲得當月的實際最大值。 https://docs.oracle.com/javase/7/docs/api/java/util/Calendar.html –

+0

@mrmcwolf我認爲這裏的一個明確部分是:他應該寫他自己的日期驗證。這是作業。你基本上是在告訴他作弊的一部分。 – GhostCat

回答

0

不知道這是否是你要求的,但你不需要直接推入所有的條件。你可以這樣做:

boolean isDateValid = false; 
while (! isDateValid) { 
    System.out.println("The original date/month/year is invaild"); 
    System.out.println("Please enter 3 integers to represent a valid date:"); 
    day = scan.nextInt(); 
    month = scan.nextInt(); 
    year = scan.nextInt(); 
    isDateValid = ... that lengthy conditition 
} 

當然,這個心不是確切不錯,因爲用戶首先用沒有道理的錯誤消息映入眼簾。因此,我們可以扭轉乾坤,並使用一個do/while循環,而不是:

boolean isDateValid = false; 
do { 
    System.out.println("Please enter 3 integers to represent a valid date:"); 
    day = scan.nextInt(); 
    month = scan.nextInt(); 
    year = scan.nextInt(); 
    isDateValid = ... that lengthy conditition 
    if (!isDateValid) { 
     System.out.println("The original date/month/year is invalid; please try again"); 
    } 
} while (!isDateValid) 

而對於實際的檢查,只需用分離在你的心中,事情開始 - 方面都需要進行檢查,像什麼:

public static boolean isLeapYear(int year) { 

如果年份實際上是閏年,則返回true的方法。

您可以構建大量這樣的小幫手方法,用於檢查不同的問題的各個方面。最後,你把這些小片放在一起做所有必要的檢查。

+1

在那一部分,我可能會把它做成'do' /'while'循環而不是'while循環。 –

+0

我會檢查出來。謝謝 。 – shaike

+0

@JonSkeet我增強了我的答案;讓我們希望它能幫助他去。 – GhostCat