♂WhiteWin♂

导航

【Java】Task07实验4第5题解析

    // TODO 1: 添加一个字段percent,用以表示百分秒
    private int percent;

按照类的封装性要求,字段一般定义为私有的

 

    // TODO 2: 添加一个只读属性getPercent,用以实现对内部字段percent的封装
    // 并加入相应的javadoc注释。
    /**
     * 获取我的时间的百分秒数
     * @return
     */
    public int getPercent() {
        return this.percent;
    }    

可以在字段percent上点击右键,使用右键菜单Source -> Generate Getters and Setters...来生成读属性或写属性

在该方法前输入 "//*"可自动生成Javadoc注释模板

 

    // TODO 3: 将下面的setTime方法修改成具有4个整型的参数:hour, minute, second, percent,
    // 分别表示需要设置的时、分、秒和百分秒。并加上相应地XML注释。
    // 后面几种版本的setTime方法及构造函数最好也能做相应地修改。
    /**
     * 设置新的时间
     * @param hour 小时,0-23
     * @param minute 分钟,0-59
     * @param second 秒,0-59
     */
    public void setTime(int hour, int minute, int second, int percent) {
        if (hour<0 || hour>23) return;
        if (minute<0 || minute>59) return;
        if (second<0 || second>59) return;
        if (percent<0 || percent>99) return;

        this.hour = hour;    
        this.minute = minute;    
        this.second = second;
        this.percent = percent;
        }

在原有3参数版setTime(int hour, int minute, int second)基础上,添加int percent参数,得到4参数版本。

同时在卫语句中加入对参数percent的合法性检查,及对字段percent的赋值。

 

    // TODO 4: 添加一个具有3个参数的构造函数,调用TODO 3中4参数版的setTime方法初始化时间
    public void setTime(int hour, int minute, int second) {
        setTime(hour, minute, second, 0);
    }

原3参数的setTime需要保留,通过调用4参数版本来实现。

完成4参数版的setTime方法后,构造函数中调用setTime方法可相应调整:

    public MyTime(){
        setTime(0, 0, 0, 0);
    }
    
    public MyTime(int hour) {
        setTime(hour, 0, 0, 0);
    }
    
    public MyTime(int hour, int minute) {
        setTime(hour, minute, 0, 0);
    }
    
    public MyTime(int hour, int minute, int second) {
        setTime(hour, minute, second, 0);
    }

 

    // TODO 5: 添加一个increasePercent方法,用于实现将百分秒数加1
    // 并添加相应地javadoc注释。
    /**
     * 百分秒加1,达到100时秒加1并将percent清零
     */
    public void increasePercent() {
        this.percent++;
        if (this.percent>=100) {
            this.percent = 0;
            increaseSecond();
        }
    }

可参数后面的increaseSeocnd方法来写

 

    // TODO 6: 修改该清零的方法,以实现同时将百分秒清零。
    /**
     * 将该时间清零
     */
    public void Clear()
    {
        setTime(0, 0, 0, 0);
    }

改成调用4参数版本的setTime方法清零

 

    // TODO 7: 下面这个ToUniversalString方法返回的时间字符串不包括百分秒
    // 请做出相应地修改,以使返回的时间字符串中包括百分秒
    /**
     * 返回当前时间的通用时间格式(24小时制)字符串
     * @return 形如07:49:28的表示当前时间的字符串
     */
    public String toUniversalString()
    {
        return String.format("%02d:%02d:%02d.%02d", hour, minute, second, percent);
    }

使用%02d格式,输出2位数字的百分秒

 

        // 初始化定时器,无延时,1000ms(即1秒)执行一次定时任务
        // TODO 8: 请将定时器timer设为10毫秒(1个百分秒)触发1次。
        timer = new Timer();
        long delay = 0;
        long period = 10;
        timer.scheduleAtFixedRate(task, delay, period);

本TODO任务在TimePiece类中,period以毫秒为单位,设定定时时间间隔

 

            public void run() {
                // TODO 9: 定时器timer设为10毫秒触发1次后。修改下面的语句,
                // 以使定时器timer每触发一次,计时器对象timePiece增加10毫秒(1个百分秒)。
                if (!pause) {    // 只在计时状态时,时间走,更新时间显示
                    time.increasePercent();
                    lblTime.setText(time.toUniversalString());
                }
            }

原调用increaseSecond方法,每秒刷新一下时间。现改成调用increasePercent方法,每0.01秒刷新1次

 

运行结果:

 

posted on 2022-11-30 10:48  银翼  阅读(17)  评论(0编辑  收藏  举报