数字时钟incrementMinutesBy方法开发问题求助
修复数字时钟的incrementMinutesBy方法
需求说明
需要实现分钟数累加逻辑,满足:
- 最终
currentMinutes的值为原有分钟数与传入参数之和对60取模的结果 currentHour需累加原有分钟数与传入参数之和除以60的商,同时保持24小时制循环(超过23则回滚到0)
原方法存在的问题
当前的incrementMinutesBy方法有以下错误:
- 多余的
m++语句,导致分钟数被额外加1,不符合累加需求 - 未实现分钟进位到小时的逻辑
- 仅当分钟数超过59时才设置新分钟值,否则不会更新
currentMinutes - 异常检查逻辑不严谨,未正确拦截负数输入
修复后的代码
替换原有的incrementMinutesBy方法为以下实现:
public void incrementMinutesBy(int minutes) { // 检查输入合法性:不允许负数分钟 if (minutes < MINUTES_MIN) { throw new IllegalArgumentException("Invalid input. No negative minutes"); } int totalMinutes = getMinutes() + minutes; int hoursToAdd = totalMinutes / TOTAL_NUMBERS_MINUTES; int newMinutes = totalMinutes % TOTAL_NUMBERS_MINUTES; // 更新分钟数 setMinutes(newMinutes); // 调用已有的小时累加方法处理进位,自动处理24小时循环 incrementHoursBy(hoursToAdd); }
修复要点说明
- 输入合法性检查:提前判断传入的
minutes是否为负数,直接抛出异常,符合方法的前置条件 - 总分钟计算:计算原有分钟与传入分钟的总和,用于后续拆分分钟和进位小时
- 拆分分钟与小时:通过整除60得到需要进位的小时数,取模60得到最终的分钟数
- 复用现有逻辑:调用已实现的
incrementHoursBy方法处理小时进位,利用其已有的24小时循环逻辑,避免重复代码 - 完整更新状态:无论分钟是否进位,都会调用
setMinutes更新分钟值,确保状态正确
测试示例
比如初始化时钟为12:15:
- 调用
incrementMinutesBy(59),最终时间应为13:14(15+59=74,74/60=1小时进位,74%60=14分钟) - 调用
incrementMinutesBy(60),最终时间应为13:15(15+60=75,75/60=1小时进位,75%60=15分钟) - 调用
incrementMinutesBy(125),最终时间应为14:20(15+125=140,140/60=2小时进位,140%60=20分钟)
内容的提问来源于stack exchange,提问作者JOHN
相关产品推荐
相关产品推荐

