我正在尝试迭代一系列工作日,其中每个工作日映射到一个整数(星期日 = 1,星期一 = 2,...,星期六 = 7)
。
范围由开始和结束日期
定义。这对于像星期一(2) - 星期四(5)
这样的开始和结束日来说很好,我可以这样做:
for(int i = startDay; i <= endDay; i++) { ... }
当范围分为一周的结束和开始时(例如星期五(6) - 星期一(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/