集训第二次作业
我们要做一个时钟类,这类的对象有一个start方法,它能实现这样的功能
输出:
00:00
00:01
00:02
00:03
00:04
00:05
00:06
. …
00:59
01:00
输出格式可以用System.out.printf("%02d:%02d",hour,min);
思路
1.既然有小时和分钟部分,那就定义hour和minute
2.可以看到当分钟累加到60后,小时部分加1
3.定义minuteLimit,当minute累加到minuteLimit后,hour加1
4.在此题中限制了hour的范围,所以对hour的范围不用定义limit,当然也可以定义hourLimit=24.又或者通过Scanner类来获取hourLimit。
5.构建start方法,在start内进行对minute的累加和hour判断加1的操作
代码实现
package basic;
public class clock {
private int hour=0;
private int minute=0;
final int hourLimit=24;
final int minLimit=60;
public void start() throws InterruptedException {
System.out.printf("%02d:%02d\n",hour,minute);
while(hour<=0)
{
Thread.sleep(1000);
minute++;
if(minute==minLimit)
{
hour++;
minute=0;
}
System.out.printf("%02d:%02d\n",hour,minute);
}
}
public static void main(String[] args) throws InterruptedException {
clock cl=new clock();
cl.start();
}
}
Thread.sleep()
Thread.sleep(1000)在上述程序的作用是让start中的输出拥有一秒间隔
Thread.sleep()是Thread类中的一种静态方法,使当前正在执行的线程休眠(暂时停止执行)指定的毫秒数,取决于系统计时器和调度程序的精度和准确性。 该线程不会失去任何监视器的所有权。Thread.sleep()的具体实现有两种形式:
1.Thread.sleep(long mills); 线程睡眠mills毫秒
2.Thread.sleep(long mills,int nanos); 线程睡眠mills毫秒+nanos纳秒
在哪个线程中调用Thread.sleep()就暂停哪个程序
说人话:像上述的程序没有加Thread.sleep的时候是一波输出,一秒真男人,加上了Thread.sleep()之后就给他套上了限制,告诉他这波干完之后必须停几秒,再干下一个。
public void countdown(int num) throws InterruptedException {
while(num!=0)
{
num--;
System.out.println(num);
Thread.sleep(500);
}
}
当运行上述程序的时候,就会看到一个一个输出倒计时,可以更改sleep内数字来改变间隔时间