我有一个家庭作业,要求用户用(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