我正在尝试遍历工作日的范围,其中每个工作日都映射到整数(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/

10-09 01:14