时间改变(类与对象)

题目:

  • 类的成员变量与方法、构造方法 在程序中经常要对时间进行操作但是并没有时间类型的数据。那么我们可以自己实现一个时间类来满足程序中的需要。0个整型成员时hour分minute秒second为了保证数据的安全性这三个成员变量应声明为私有。
  • 为MyTime类定义构造方法以方便创建对象时初始化成员变量。 再定义diaplay方法用于将时间信息打印出来。 为MyTime类添加以下方法 addSecond(int sec) addMinute(int min) addHour(int hou) subSecond(int sec) subMinute(int min) subHour(int hou) 分别对时、分、秒进行加减运算。

题目理解:
我自己的理解是,时间是24小时制的,就是平时看见的【小时:分钟:秒】这种格式,然后输入一个时间后,对时分秒进行不同时间的加减操作后的具体时间值,也是这种格式【小时:分钟:秒】

程序分析:
1.使用24小时制的时间来做,所以初始输入的时间肯定有要求 小时:不超过24,分钟和秒不超过60
2.当调用秒的方法的时候,如果加或者减的数大于了60,那么分就应该相应的做出加减操作,所以最后秒的位置为对60不断求余后的模
3.同理,在对分操作的时候,小时也要进行调整
4.当小时超过24或者小于0的时候,就要重新重0或者前一天开始了,

注意:
当秒、分过于大的时候,也就是超过了好几倍的60,比它大的单位所要+的数值是要改变的

代码实现:

package com.xiaowang;

/**
 * @Author 小王
 * @DATE: 2022/7/14
 */
/*
5.类的成员变量与方法、构造方法 在程序中经常要对时间进行操作但是并没有时间类型的数据。那么我们可以自己实现一个 时间类 来满足程序中的需要。
0个整型成员时hour分minute秒second为了保证数据的安全性这三个成员变量应声明为私有。
 为MyTime类定义构造方法以方便创建对象时初始化成员变量。 再定义diaplay方法用于将时间信息打印出来。
  为MyTime类添加以下方法 addSecond(int sec) addMinute(int min) addHour(int hou) subSecond(int sec) subMinute(int min) subHour(int hou)
  分别对时、分、秒进行加减运算。*/

/*分析:
1.使用24小时制的时间来做,所以初始输入的时间肯定有要求 小时:不超过24,分钟和秒不超过60
2.当调用秒的方法的时候,如果加或者减的数大于了60,那么分就应该相应的做出加减操作,所以最后秒的位置为对60不断求余后的模
3.同理,在对分操作的时候,小时也要进行调整
4.当小时超过24或者小于0的时候,就要重新重0或者前一天开始了,
注意:
当秒、分过于大的时候,也就是超过了好几倍的60,比它大的单位所要+的数值是要改变的
*/
public class Test5 {
    public static void main(String[] args) {
        MyTime myTime = new MyTime(10, 10, 10);
        //打印初始化时间
        System.out.print("初始化时的");
        myTime.diaplay();
        System.out.print("改变后的");
        //改变时间
        /*myTime.addSecond(120);
        myTime.addMinute(130);
        myTime.addHour(12);*/
        /*myTime.subSecond(140);
        myTime.subMinute(70);*/
        myTime.subHour(20);
        myTime.diaplay();
    }
}
class MyTime{
    private int hour;
    private int minute;
    private int second;

    //构造器初始化时间
    public MyTime(int hour, int minute, int second) {
        //实例化对象的时候要注意,时分秒只能在0-60之间
        if (hour>=0 && hour<=12 && minute>=0 && minute<=60 && second>=0 && second<=60 ){
        this.hour = hour;
        this.minute = minute;
        this.second = second;
        }else {
            System.out.println("时分秒只能在0-60之间~请重新输入~");
            return;
        }
    }

    //定义diaplay方法用于将时间信息打印出来,在里面进行判断
    public void diaplay() {
        while (second>=60 || minute>=60 || hour>=24 ||second<0 || minute<0 || hour<0){//这种情况下时间是会改变的
            //向后+的情况
            if (second>=60){
                minute+=second/60;//当秒大于60的时候,分会增加,至于增加好多次就看秒的大小了,所以直接通过+秒对60的整除即可
                second%=60;//最后的秒数肯定是不超过60的
            }if (minute>=60) {
                hour+=minute/60;//当秒大于60的时候,分钟+1,至于增加好多次就看秒的大小了,所以直接通过+秒对60的整除即可
                minute %= 60;//最后的秒数肯定是不超过60的
            }if (hour>=24){
                hour%=24;
            }
            //向前推的情况
            if (second<0){
                minute-=Math.abs(second/60);//当秒小于0的时候,秒-1,因为秒是负的,要是不取绝对值,减一个负的等于加一个正的,就有问题了~
                second=Math.abs(second%60);//最后的秒数肯定是不超过60的,并且肯定是正数
            }if (minute<0) {
                hour-=Math.abs(minute/60);//当秒小于0的时候,分钟-1
                minute =Math.abs(minute%60) ;//最后的秒数肯定是不超过60的,并且肯定是正数
            }if (hour<0){
                hour =24-Math.abs(hour%24);//因为是24小时制的,所以要用24去减去减去的绝对值
            }
        }
        System.out.println("时间为="+getHour()+":"+getMinute()+":"+getSecond());
    }
    //addSecond(int sec)
    public int addSecond(int sec){
        setSecond(second+sec);//时间改变后要保存哇
        return second+sec;
    }
    // addMinute(int min)
    public int addMinute(int min){
        setMinute(minute+min);
        return minute+min;
    }
    // c
    public int addHour(int hou){
        setHour(hour+hou);
        return hour+hou;
    }
    // subSecond(int sec)
    public int subSecond(int sec){
        setSecond(second-sec);
        return second-sec;
    }
    // subMinute(int min)
    public int subMinute(int min){
        setMinute(minute-min);
        return minute-min;
    }
    // subHour(int hou)
    public int subHour(int hou){
        setHour(hour-hou);
        return hour-hou;
    }
    //get/set方法
    public int getHour() {
        return hour;
    }

    public void setHour(int hour) {
        this.hour = hour;
    }

    public int getMinute() {
        return minute;
    }

    public void setMinute(int minute) {
        this.minute = minute;
    }

    public int getSecond() {
        return second;
    }

    public void setSecond(int second) {
        this.second = second;
    }
}

输出:
在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值