C# Modulus operator计算星期制出狱日期0值问题无新语法解决方案
解决方案
核心逻辑
问题本质是17的自然计数规则和模运算默认返回06的范围不匹配,仅需要调整数值偏移量适配即可,不需要引入任何新语法。
方案1:无分支偏移计算(更推荐)
直接修改出狱日期的计算行即可:
int dayOfRelease = (dayOfEntry + daysOfSentencing - 1) % 7 + 1;
计算逻辑说明:
- 先减1:把输入的17的日期转换为06的索引,对齐模运算的输出范围
- 执行模7计算:得到0~6范围内的出狱日期索引
- 最后加1:把索引转换回1~7的自然计数,最终结果完全不会出现0值,刚好匹配需求
完整修改后代码:
Console.WriteLine("Enter day of prison entry (from 1-7)"); int dayOfEntry = int.Parse(Console.ReadLine()); Console.WriteLine("How many days of sentencing?"); int daysOfSentencing = int.Parse(Console.ReadLine()); int dayOfRelease = (dayOfEntry + daysOfSentencing - 1) % 7 + 1; Console.WriteLine("Prisoner is due to be released from prison on the: {0} day", dayOfRelease );
方案2:结果兜底修正
如果希望保留原有模运算逻辑,仅对0值做特殊处理,可以用三元运算符做兜底修正:
int dayOfRelease = (dayOfEntry + daysOfSentencing) % 7; dayOfRelease = dayOfRelease == 0 ? 7 : dayOfRelease;
逻辑非常直观:当模运算结果为0时直接替换为7,其余情况保留原结果即可。
测试验证
用给出的用例测试:
- 第3天入狱、服刑4天:两种方案输出结果均为7,符合预期
- 第2天入狱、服刑3天:输出结果为5,符合预期
- 第7天入狱、服刑7天:输出结果为7,不会出现0值
内容的提问来源于stack exchange,提问作者BennyElie
相关产品推荐
相关产品推荐

