【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次
运行结果: