Java中判断指定星期数字是否处于给定星期区间的方法实现
解决星期数字区间判断的问题
这个问题的核心在于星期是循环的周期序列,普通的区间判断逻辑(target >= start && target <= end)只适用于起始星期不大于结束星期的情况,一旦遇到跨周的区间(比如周六到周一)就会失效。我来帮你修正这个逻辑:
首先明确规则:
- 周日=1,周一=2,周二=3,周三=4,周四=5,周五=6,周六=7
修正后的Java方法
public static boolean isWeekInRange(int targetWeek, int startWeek, int endWeek) { // 先校验输入参数合法性,确保星期数字在1-7之间 if (!isValidWeekNumber(targetWeek) || !isValidWeekNumber(startWeek) || !isValidWeekNumber(endWeek)) { throw new IllegalArgumentException("星期数字必须在1到7之间"); } // 分两种场景处理区间 if (startWeek <= endWeek) { // 非跨周区间:比如周一(2)到周三(4),直接判断target是否在[start, end]范围内 return targetWeek >= startWeek && targetWeek <= endWeek; } else { // 跨周区间:比如周六(7)到周一(2),此时区间包含「start到7」和「1到end」两部分 return targetWeek >= startWeek || targetWeek <= endWeek; } } // 辅助方法:校验星期数字是否合法 private static boolean isValidWeekNumber(int weekNum) { return weekNum >= 1 && weekNum <= 7; }
测试案例验证
我们来验证你提到的例子:
当指定星期为周日(1)、起始星期为周一(2)、结束星期为周三时,方法应返回false。
调用isWeekInRange(1, 2, 4),因为2 <=4进入非跨周分支,判断1 >=2 && 1 <=4结果为false,完全符合预期。
再测试几个跨周场景:
- 起始=周六(7),结束=周一(2),target=周日(1):返回true(属于1-2区间)
- 起始=周五(6),结束=周二(3),target=周六(7):返回true(属于6-7区间)
- 起始=周五(6),结束=周二(3),target=周四(5):返回false(不在任何区间内)
逻辑说明
- 参数校验:先过滤非法输入,避免无效数字干扰判断结果
- 非跨周区间:起始星期小于等于结束星期时,区间是连续的,用常规区间判断即可
- 跨周区间:起始星期大于结束星期时,区间被拆成了两段,只要target属于其中任意一段就返回true
内容的提问来源于stack exchange,提问作者Gurunathan
相关产品推荐
相关产品推荐

