-4

コードはほぼ完成しました。ただし、金曜日に当たり、たまたまその月の 13 日になる日付だけを除外する代わりに、13 回ごとの送信を除外しました。私はそれを考えました:

int friday = ((startingDayOfWeek+dayOfYear) % 7);
            if (dayOfYear != 13 && friday != 5)
            System.out.println(month + "/" + dayOfYear);
            dayOfYear++;

うまくいきますが、それらをすべて排除しています。これを達成するためのより簡単な方法があることを理解しています。ただし、この方法で行う必要があります。完全なコードは次のとおりです。

public class LoopDate {

public static void main(String[] args) {

    //Denotes that Tuesday is the first day of 2013
    int startingDayOfWeek = 2;
    int year = 2013;
    int numDays = 0;
    for (int month = 1; month <= 12; month++) {
        switch (month) {
        case 1:
        case 3:
        case 5:
        case 7:
        case 8:
        case 10:
        case 12:
            numDays = 31;
            break;
        case 4:
        case 6:
        case 9:
        case 11:
            numDays = 30;
            break;
        case 2:
            if (((year % 4 == 0) && !(year % 100 == 0))
                    || (year % 400 == 0))
                numDays = 29;
            else
                numDays = 28;
            break;
        default:
            System.out.println("Invalid month.");
            break;
        }
        int dayOfYear = 1;
        while (dayOfYear <= numDays)
        {
            int friday = ((startingDayOfWeek+dayOfYear) % 7);
            if (dayOfYear != 13 && friday != 5)
            System.out.println(month + "/" + dayOfYear);
            dayOfYear++;
        }



    }
}
}
4

1 に答える 1

0

あなたのブール論理は間違っています。

if (dayOfYear != 13 && 金曜日 != 5)

次のようにする必要があります。

if (dayOfYear != 13 || 金曜日 != 5)

「13日の金曜日ですか」のネガティブチェックをしていますね。肯定的なチェックを否定的なチェックに変換するときは、条件を NOT (完了) にし、演算子を反転する (OR は AND になり、AND は OR になる) 必要があります。

また、そのようなブール論理を扱うときは、通常、セグメントに意味のある名前を付けます。変数に「コスト」がかかりますが、後で数え切れないほどの時間を節約できます!

boolean isFridayThe13th = (dayOfYear == 13 && 金曜日 == 5);
if (!isFridayThe13th) ...
于 2013-02-11T09:28:39.060 に答える