我有一個家庭作業,要求用戶用(mm/dd/yyyy)格式輸入Java中的日期,然後確定輸入的日期是否有效。除了2月份以外,我每個月都能成功完成這項工作,因爲您必須考慮閏年。確定Java中的有效日期
我有這樣的代碼:
import java.util.Scanner;
/**
*
* @author Andrew De Forest
* @version v1.0
*
*/
public class exc6
{
public static void main (String[] args)
{
//Initialize a string
String getInput;
//Initialize some integers
int month, day, year;
//Make a boolean
boolean validDate;
//Set the date to false
validDate = false;
//Ask for input
System.out.println("Enter a date (mm/dd/yyyy)");
//Initialize the scanner
Scanner keyboard = new Scanner (System.in);
//Get input & use a delimiter
keyboard.useDelimiter("[/\n]");
month = keyboard.nextInt();
day = keyboard.nextInt();
year = keyboard.nextInt();
if((month >= 1 && month <= 12) && (day >= 1 && day <= 31))
{
//For months with 30 days
if((month == 4 || month == 6 || month == 9 || month == 11) && (day <= 30))
{
validDate = true;
}
//For months with 31 days
if((month == 1 || month == 2 || month == 3 || month == 5 || month == 7 || month == 8 || month == 10 || month == 12) && (day <= 31))
{
validDate = true;
}
//For February
if((month == 2) && (day < 30))
{
//Boolean for valid leap year
boolean validLeapYear = false;
//A leap year is any year that is divisible by 4 but not divisible by 100 unless it is also divisible by 400
if((year % 400 == 0) || ((year % 4 == 0) && (year %100 !=0)))
{
validLeapYear = true;
}
if (validLeapYear == true && day <= 29)
{
validDate = true;
}
else if (validLeapYear == false && day <= 28)
{
validDate = true;
}
}
}
//If the date is valid
if(validDate == true)
{
System.out.println(month + "/" + day + "/" + year + " is a valid date.");
}
else
{
System.out.println("Invalid date!");
}
}
}
我最關心的部分是這樣的:
//For February
if((month == 2) && (day < 30))
{
//Boolean for valid leap year
boolean validLeapYear = false;
//A leap year is any year that is divisible by 4 but not divisible by 100 unless it is also divisible by 400
if((year % 400 == 0) || ((year % 4 == 0) && (year %100 !=0)))
{
validLeapYear = true;
}
if (validLeapYear == true && day <= 29)
{
validDate = true;
}
else if (validLeapYear == false && day <= 28)
{
validDate = true;
}
}
}
據我所知,它看起來是正確的。然而,當我輸入類似2/29/2011的東西時,它會作爲有效日期返回(不應該這樣,因爲2011年不是閏年)。爲什麼是這樣?我錯過了什麼,或者過去了,導致錯誤的日期返回有效?
嘗試使註釋有意義,而不僅僅是代碼的重複。此外,在發佈代碼時,嘗試刪除不相關的內容,例如,開放的javadoc不會增加任何值,並佔用明顯的垂直空間。 – 2012-02-13 00:56:33
@Dave Newton我會記住這一點,謝謝 – 2012-02-13 01:06:49
你不能使用任何java庫嗎? 'java.util.Calendar','org.joda.time.DateTime'? – Gevorg 2012-02-13 02:23:06