我正在尝试遍历工作日的范围,其中每个工作日都映射到整数(Sunday = 1, Monday = 2, ..., Saturday = 7)
。
范围由start and end day
定义。我可以这样做,对于像Monday(2) - Thursday(5)
这样的开始和结束日期都很好。
for(int i = startDay; i <= endDay; i++) { ... }
将范围分为一周的末尾和一周的开始时,我遇到困难,例如
Friday(6) - Monday(2)
。这显然不适用于上述for循环-例如for(int i = 6; i <= 2; i++) { ... } // wouldn't even execute once.
我能看到的唯一解决方案是实现某种循环缓冲区,对于这样一个简单的问题,我觉得这是过大的。我很困惑,很可能在这里遗漏了一些明显的东西。我认为解决方案可能与模块化算法有关,但我不太确定。
最佳答案
你可以做:
int numberOfDays = endDay >= startDay ? endDay - startDay : 8 - (startDay - endDay);
for (int i = startDay; i <= startDay + numberOfDays; i++) {
int day = (i - 1) % 7 + 1;
}
这利用了
%
模运算符来确保所有值都保持在1到7之间。例如,一旦
i
变为8,计算将把day
换回1:(8 - 1) % 7 + 1 == 1
。关于java - 迭代工作日的子范围,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23137404/