-3

まず、このような質問をされると、皆さんはそれを嫌うことを知っていますが、私のコードの何が問題になっているのかわからないので、誰かに見てもらいたいと思います。そうは言っても、私のコードはひどいように見えることを私は知っています、そしてそれはこれがすべて1つの方法で行われなければならないからです。

public static int dayOfWeek(int year, int month, int day) {
    int monthCode = 0, centuryCode = 0, numLeapYears = 0, dayOfWeek = 0;

    int yearDigits = year % 100;

    if((year % 400 == 0) || ((year % 4 == 0) && (year % 100 != 0))) {
        numLeapYears = yearDigits / 2 + 1;
    }else {
        numLeapYears = yearDigits / 2;
    }

    if(((year >= 1400) && (year <= 1499)) || ((year >= 1800) && (year <= 1899)) || ((year >= 2200) && (year <= 2299))) {
        centuryCode = 2;
    }else if(((year >= 1500) && (year <= 1599)) || ((year >= 1900) && (year <= 1999)) || ((year >= 2300) && (year <= 2399))) {
        centuryCode = 0;
    }else if(((year >= 1600) && (year <= 1699)) || ((year >= 2000) && (year <= 2099)) || ((year >= 2400) && (year <= 2499))) {
        centuryCode = 5;
    }else if(((year >= 1700) && (year <= 1799)) || ((year >= 2100) && (year <= 2199)) || ((year >= 2500) && (year <= 2599))) {
        centuryCode = 4;
    }

    switch(month) {
        case 1: monthCode = 0;
        break;

        case 2: monthCode = 3;
        break;

        case 3: monthCode = 3;
        break;

        case 4: monthCode = 6;
        break;

        case 5: monthCode = 1;
        break;

        case 6: monthCode = 4;
        break;

        case 7: monthCode = 6;
        break;

        case 8: monthCode = 2;
        break;

        case 9: monthCode = 5;
        break;

        case 10: monthCode = 0;
        break;

        case 11: monthCode = 3;
        break;

        case 12: monthCode = 5;
        break;
    }

    dayOfWeek = ((centuryCode + yearDigits + numLeapYears + monthCode + day) % 7);
    return dayOfWeek;
}//dayOfWeek

私はまだコードにコメントする必要はありません。この関数の目的は、数値(0、1、2など)で表される日(日曜日、月曜日など)が当たる日付を計算することです。コードは機能しますが、正しい番号が出力されません。たとえば、1969年7月20日は0として出力されるはずですが、私のコードは3を出力します。このメソッドのロジックに欠陥が見つからないようです。

4

1 に答える 1

0

月のスイッチはオフに見えます-カレンダーは0から始まる月をインデックス化します。したがってcal.get(Calendar.MONTH) == 0、1月の日付の場合。

そうは言っても、あなたは何monthCodeを表現すべきかについての説明を提供していないため、あらゆる種類のヘルプを提供することは非常に困難です.

于 2012-09-27T17:38:09.423 に答える