Java时钟程序问题求助:无法将负值及越界时间值修正为0
解决Java时钟程序的时分秒范围修正问题
看起来你的时钟程序缺少了对时分秒数值的边界校验逻辑——咱们只需要给每个时间单位添加简单的范围检查,就能把非法值(负值或者超出上限的数值)自动置为0,完美匹配你的测试用例要求。
核心思路
针对每个时间单位,明确合法范围:
- 小时:合法范围是
0 <= hour < 24,超出或小于这个范围就置为0 - 分钟/秒:合法范围是
0 <= minute/second < 60,超出或小于就置为0
你可以选择在初始化/设置属性时就修正值(推荐,保证内部数据始终合法),或者在输出时临时修正。下面给你两种实现方式:
方式1:在构造器/Setter中修正数据(推荐)
这种方式能确保时钟对象内部存储的始终是合法值,避免后续逻辑出错:
public class Clock { private int hour; private int minute; private int second; // 构造器中直接校验并修正 public Clock(int hour, int minute, int second) { this.hour = validateHour(hour); this.minute = validateMinuteOrSecond(minute); this.second = validateMinuteOrSecond(second); } // 单独的Setter方法也加上校验 public void setHour(int hour) { this.hour = validateHour(hour); } public void setMinute(int minute) { this.minute = validateMinuteOrSecond(minute); } public void setSecond(int second) { this.second = validateMinuteOrSecond(second); } // 抽取校验逻辑,代码更简洁 private int validateHour(int hour) { return (hour < 0 || hour >= 24) ? 0 : hour; } private int validateMinuteOrSecond(int value) { return (value < 0 || value >= 60) ? 0 : value; } // 输出方法直接返回合法值 @Override public String toString() { return String.format("%d:%d:%d", hour, minute, second); } }
方式2:在输出时临时修正
如果不想修改内部存储逻辑,也可以在输出字符串的时候当场修正:
@Override public String toString() { // 临时计算合法值 int validHour = (hour < 0 || hour >= 24) ? 0 : hour; int validMinute = (minute < 0 || minute >= 60) ? 0 : minute; int validSecond = (second < 0 || second >= 60) ? 0 : second; return String.format("%d:%d:%d", validHour, validMinute, validSecond); }
测试验证
用你的两个测试用例跑一下:
- T1:
new Clock(-3, -21, -30).toString()→ 输出0:0:0 - T2:
new Clock(24, 60, 60).toString()→ 输出0:0:0
完全符合你的预期结果~
内容的提问来源于stack exchange,提问作者user9587342
相关产品推荐
相关产品推荐

