8 时间减法

public class MyTime {
    private int hour;
    private int minute;
    private int second;

    // 构造方法,用于初始化时间
    public MyTime(int hour, int minute, int second) {
        setTime(hour, minute, second); // 调用辅助方法来设置时间,确保时间合法
    }

    // 辅助方法:设置时间,同时确保时间合法(小时在0-23之间,分钟和秒在0-59之间)
    private void setTime(int hour, int minute, int second) {
        this.hour = (hour % 24 + 24) % 24; // 确保小时在0-23之间
        this.minute = (minute + 60) % 60; // 确保分钟在0-59之间,处理负数情况
        this.second = (second + 60) % 60; // 确保秒在0-59之间,处理负数情况
    }

    // 减少秒数的方法
    public void subSecond(int second) {
        this.second -= second;
        adjustTime(); // 调用辅助方法来调整时间,处理借位
    }

    // 减少分钟数的方法
    public void subMinute(int minute) {
        this.minute -= minute;
        adjustTime(); // 调用辅助方法来调整时间,处理借位
    }

    // 减少小时数的方法
    public void subHour(int hour) {
        this.hour -= hour;
        this.hour = (this.hour + 24) % 24; // 确保小时在0-23之间,处理负数情况
        // 注意:这里不需要调用adjustTime(),因为小时减少不会直接影响秒或分钟,除非它导致时间变为负数(但已通过取模运算处理)
    }

    // 辅助方法:调整时间,处理秒或分钟的借位
    private void adjustTime() {
        if (this.second < 0) {
            this.second += 60; // 秒数变为负数时,从分钟借1分钟(即60秒)
            this.minute -= 1;
            if (this.minute < 0) {
                this.minute += 60; // 分钟变为负数时,从小时借1小时(即60分钟)
                this.hour -= 1;
                if (this.hour < 0) {
                    this.hour += 24; // 小时变为负数时,通过加24小时来确保它在0-23之间(实际上这种情况在subHour中已经处理过,但这里为了完整性保留)
                }
            }
        }
        if (this.minute < 0) {
            // 注意:这个条件在正常情况下不会触发,因为上面的if语句已经处理了分钟的借位。
            // 但为了代码的健壮性,我们还是保留了这个检查(尽管它是多余的,因为上面的逻辑已经保证了minute不会是负数)。
            // 在实际编程中,这样的冗余检查有时可以作为防御性编程的一部分。
            this.minute += 60; // 如果因为某种原因minute仍为负数,则从这里借位(虽然这种情况理论上不会发生)。
            this.hour -= 1;
            if (this.hour < 0) {
                this.hour += 24; // 同样,这个if语句也是冗余的,但为了完整性还是保留了。
            }
        }
        // 注意:我们不需要对hour进行额外的检查,因为subHour方法已经通过取模运算处理了负数小时的情况。
    }

    // 重写toString方法,用于格式化输出时间
    @Override
    public String toString() {
        return String.format("%02d:%02d:%02d", this.hour, this.minute, this.second);
    }

    public static void main(String[] args) {
        // 初始化时间为 12:25:40
        MyTime time = new MyTime(12, 25, 40);

        // 减少80秒之后输出时间为:12:24:20
        time.subSecond(80);
        System.out.println(time); // 输出: 12:24:20

        // 减少70分钟后输出时间为:11:14:20
        time.subMinute(70);
        System.out.println(time); // 输出: 11:14:20

        // 减少25小时后输出时间为:10:14:20
        time.subHour(25);
        System.out.println(time); // 输出: 10:14:20
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值