3

これは私の更新されたコードですが、まだ機能しません。2 月 29 日のすべての場合に日を返します。うるう年の場合は日のみを返し、うるう年でない場合は 1 を返します。

public int checkDay (int day)
{
    // For months with 30 days.
    if ((month == 4 || month == 6 || month == 9 || month == 11) && day <= 30)
        return day;
    // For months with 31 days.
    if ((month == 1 || month == 3 || month == 5 || month == 7 || month == 8 || month == 10 || month == 12) && (day <= 31))
        return day;
    // For leap years.
    // If February 29th...
    if (month == 2 && day == 29)
    {
        // Check if year is a leap year.
        if ((year%4 == 0 && year%100!=0) || year%400 == 0) 
        {
            // If year is a leap year return day as 29th.
            return day; 
        }
        // If not a leap year, return day as 1st.
        else return 1;
    }
    // If Date if February 1st through 28th return day, as it is valid.
    if (month == 2 && (day >= 1 && day <= 28))
        return day;
// Return day as 1st for all other cases.
return 1;
}
4

3 に答える 3

5

GregorianCalendar を試す http://docs.oracle.com/javase/6/docs/api/java/util/GregorianCalendar.html

GregorianCalendar gc = new GregorianCalendar();
if (gc.isLeapYear(year) ) 
于 2013-09-04T07:21:23.007 に答える
1

コードを次のように変更してみてください

if (year%4==0&&(year%100!=0&&year%400==0)) 
于 2013-09-04T07:22:22.973 に答える
0
if ((year%4==0 && year%100!=0) || year%400==0)

これはあなたの問題を解決します、あなたの論理は間違っていました:)

このコードを試してください: 返されたブール値が false の場合、日付が無効であるため、日付を 1 に設定できます。

public bool checkDay (int day, int month, int year){
    bool valid = false;
    if(day >=1){
        // For months with 30 days.
        if ((month == 4 || month == 6 || month == 9 || month == 11) && day <= 30){
            valid = true;
        }
        // For months with 31 days.
        if ((month == 1 || month == 3 || month == 5 || month == 7 || month == 8 || month == 10 || month == 12) && day <= 31){
            valid = true;
        }
        // For February.
        if (month == 2)
        {
            if(day <= 28){
                valid = true;
            } else if(day == 29){
                if ((year%4 == 0 && year%100!=0) || year%400 == 0){
                    valid = true;
                } //else invalid
            }
        }
    } //else date is not valid
    return valid;
}

各メソッドに return ステートメントを 1 つだけ含めることをお勧めします。これにより、コードを理解しやすくなり、デバッグして潜在的なエラーを見つけることが容易になります。お困りのことがございましたら、お気軽にお尋ねください。

于 2013-09-04T07:25:47.020 に答える