使用Switch语句仅从Java中删除某些日期
我几乎完成了我的代码;然而,它并没有完全取消星期五的日期,也恰好是一个月的第13天,而是取消了每13次提交。我想:使用Switch语句仅从Java中删除某些日期,java,date,Java,Date,我几乎完成了我的代码;然而,它并没有完全取消星期五的日期,也恰好是一个月的第13天,而是取消了每13次提交。我想: int friday = ((startingDayOfWeek+dayOfYear) % 7); if (dayOfYear != 13 && friday != 5) System.out.println(month + "/" + dayOfYear); dayOfYear++; 这是可
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行呢?我最终通过设置断点和单步执行来修复它。我想我可以在这里得到更容易的答案。也许下次吧。