-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

你的布尔逻辑是错误的。

如果 (dayOfYear != 13 && 星期五 != 5)

应该:

if (dayOfYear != 13 || 星期五 != 5)

您正在对“13 号星期五”进行否定检查。将肯定检查转换为否定检查时,您需要不要条件(完成),并翻转运算符(OR 变为 AND,AND 变为 OR)。

此外,在处理这样的布尔逻辑时,我通常给段赋予有意义的名称。它“花费”了一个变量,但可以在以后为您节省无数小时!

boolean isFridayThe13th = (dayOfYear == 13 && friday == 5);
如果 (!isFridayThe13th) ...
于 2013-02-11T09:28:39.060 回答