Java模仿手机设计闹钟:
利用知识点:
键盘录入,
字符串拼接与切割,
Date与字符串相互转换
多线程
java
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Scanner;
//线程类:
public class MyThread implements Runnable {
@Override
public void run() {
//创建键盘录入对象
Scanner sc=new Scanner(System.in);
System.out.println("请输入闹钟小时:HH");
String hour=sc.nextLine(); //模仿手机设置小时
System.out.println("请输入闹钟分钟:mm");
String min=sc.nextLine(); //模仿手机设置分钟
StringBuffer sb=new StringBuffer(); //创建StringBuffer或者StringBuilder对象把小时和分钟拼接为时间字符串
StringBuffer append = sb.append(hour).append(":").append(min);
String time = append.toString(); //转换为字符串MM:dd
while (true) { //定义循环,不断获取现在的时间
Date date=new Date(); //将date转换为字符串
SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String format = sdf.format(date);
System.out.println(format);
String substring = format.substring(11, 16);//利用substring切割字符串,得到现在时间的小时和分钟
try { //直接调用方法
Thread.sleep(1000); //让线程休息1秒钟,继续获取下一秒的时间
} catch (InterruptedException e) {
e.printStackTrace();
}if (substring.equals(time)) { //将切割出的现在小时分钟字符串与键盘录入的进行比较
System.out.println("播放夏天的风"); //相同,则播放音乐
equal_s_c(sc); //闹钟响了之后,判断暂停稍后再响或者停止闹钟,写了一个方法
}
}
}
public static void equal_s_c(Scanner sc) { //闹钟响了之后判断暂停稍后再响或停止,参数传入键盘录入对象
System.out.println("暂停输入c,停止输入s");
String s1 = sc.next(); //获取键盘录入
if ("s".equals(s1)) { //如果录入s代表stop直接停止闹钟
try { //由于设置闹钟时未设置秒,所以直接让线程休息一分种
Thread.sleep(1000*60);
} catch (InterruptedException e) {
e.printStackTrace();
}
} else if ("c".equals(s1)) { //输入c代表暂停,稍后再响
try {
Thread.sleep(1000 * 5*60); //模仿手机暂停后休息5分钟(测试时间有限5秒)
System.out.println("播放夏天的风"); //五分钟后线程醒来,继续播放音乐
equal_s_c(sc); //音乐响起后继续调用本方法,键盘录入s或者c命令
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
测试类//:
public class test {
public static void main(String[] args) {
MyThread mt=new MyThread();
Thread t=new Thread(mt);
t.start();
}
}