Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/362.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用Switch语句仅从Java中删除某些日期_Java_Date - Fatal编程技术网

使用Switch语句仅从Java中删除某些日期

使用Switch语句仅从Java中删除某些日期,java,date,Java,Date,我几乎完成了我的代码;然而,它并没有完全取消星期五的日期,也恰好是一个月的第13天,而是取消了每13次提交。我想: int friday = ((startingDayOfWeek+dayOfYear) % 7); if (dayOfYear != 13 && friday != 5) System.out.println(month + "/" + dayOfYear); dayOfYear++; 这是可

我几乎完成了我的代码;然而,它并没有完全取消星期五的日期,也恰好是一个月的第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++;
        }



    }
}
}

你的布尔逻辑是错误的

if (dayOfYear != 13 && friday != 5) 应该是:

if (dayOfYear != 13 || friday != 5) 今天是13号星期五,你在做阴性检查。将肯定检查转换为否定检查时,需要不执行条件,并翻转运算符OR变为and,变为OR

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

boolean isFridayThe13th = (dayOfYear == 13 && friday == 5); if (!isFridayThe13th) ...
在前面的问题中,人们给了我在这种情况下无法使用的代码。这是一条冗长的路线,不是一条简单的路线,所以我在这件事上没有收到太多关于我正在努力完成的事情的建议。我认为这是显而易见的,为什么我会带着一块代码来把整个过程重新写成4行呢?我最终通过设置断点和单步执行来修复它。我想我可以在这里得到更容易的答案。也许下次吧。