私はユーザーにJavaで日付を(mm/dd/yyyy)形式で入力させてから、入力した日付が有効かどうかを確認する宿題を割り当てています。うるう年を考慮に入れなければならないので、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は何も追加せず、顕著な垂直方向のスペースをとります。 –
@Dave Newton私はこれを念頭に置いておきます、ありがとうございます –
あなたはJavaライブラリを使用できませんか? 'java.util.Calendar'、' org.joda.time.DateTime' ?? – Gevorg