Java自定义Time时间类加减分钟功能异常如何修复
问题分析
你的代码核心问题集中在3处:
setMinute方法逻辑错误:只要传入的分钟数≥60就直接设为0,你给11:00加90分钟时,0+90=90,调用setMinute直接把分钟改成0,自然看不到30的结果addMinutes逻辑混乱:入参m和当前minute反复无意义相加,没有正确计算进位的小时数和剩余分钟数- 小时的12小时制转换逻辑多处错误,加减小时后得到的结果不符合预期
修改后的完整代码
import java.util.Scanner; public class Time { private int hour; private int minute; public Time() { } public Time(int newHour, int newMinute) { setTime(newHour, newMinute); } public void setTime(int h, int m) { setHour(h); setMinute(m); } public void setHour(int h) { // 取模24适配任意正负输入,自动换算为0-23的合法小时 hour = (h % 24 + 24) % 24; } public void setMinute(int m) { // 取模60适配任意正负输入,自动换算为0-59的合法分钟 minute = (m % 60 + 60) % 60; } public int getHour() { return hour; } public int getMinute() { return minute; } public void addHours(int h) { setHour(hour + h); // 统一转换为12小时制 if (hour == 0) { hour = 12; } else if (hour > 12) { hour -= 12; } } public void subtractHours(int h) { setHour(hour - h); // 统一转换为12小时制,和加法逻辑对齐 if (hour == 0) { hour = 12; } else if (hour > 12) { hour -= 12; } } public void addMinutes(int m) { int totalMin = minute + m; int addHour = totalMin / 60; setMinute(totalMin); addHours(addHour); } public void subtractMinutes(int m) { int totalMin = minute - m; // 处理负数分钟的借位逻辑 int subHour = totalMin < 0 ? (totalMin / 60) - 1 : totalMin / 60; setMinute(totalMin); addHours(subHour); } @Override public String toString() { return "DateAndTime [hour=" + hour + ", minute=" + minute + "]"; } public static void main(String[] args) { Scanner input = new Scanner(System.in); System.out.println("Enter the time"); System.out.print("Hours: "); int hour = input.nextInt(); System.out.print("Minutes: "); int minute = input.nextInt(); Time time = new Time(hour, minute); boolean done = false; while (!done) { System.out.println("1. Add Hours"); System.out.println("2. Subtract Hours"); System.out.println("3. Add Minutes"); System.out.println("4. Subtract Minutes"); System.out.print("Choice: "); switch (input.nextInt()) { case 1: time.addHours(input.nextInt()); break; case 2: time.subtractHours(input.nextInt()); break; case 3: time.addMinutes(input.nextInt()); break; case 4: time.subtractMinutes(input.nextInt()); break; } System.out.println("Time is: " + time); } } }
核心修改说明
- 优化
setHour/setMinute校验逻辑:使用取模运算适配任意正负输入,自动换算为合法的0-23小时、0-59分钟,不再直接将非法值设为0 - 重写
addHours方法:先计算总小时数取模24得到24小时制时间,再统一转换为12小时制显示,逻辑清晰无歧义 - 重写
addMinutes方法:先计算总分钟数,拆分出要加的小时数和剩余分钟数,先设置分钟再调用addHours加对应小时,完全符合时间计算逻辑 - 配套重写
subtractHours、subtractMinutes方法,逻辑和加法对应,可直接正常使用
测试你提到的场景:初始时间输入11、0,选择加分钟输入90,输出结果为DateAndTime [hour=12, minute=30],和预期一致。
内容的提问来源于stack exchange,提问作者user16854661
相关产品推荐
相关产品推荐

