三种方法总的想法都是差不多,键盘接收姓名,然后 当时的时间new Date()和指定时间进行比较, 进行判断,统计,HashMap有一点不同,就是把姓名和签到时间一起存起来,然后再去和指定时间进行比较。
//第一种方法,使用IO流 public class SignIn01 { static int count1=0;//统计正常签到的人数 static int count2=0;//统计迟到的人数 //写出的方法 public static void write(String setTime) throws ParseException, IOException { DataOutputStream dos1=new DataOutputStream(new FileOutputStream("E:/JAVA/AAA/签到.txt")); //记录正常签到的本子 DataOutputStream dos2=new DataOutputStream(new FileOutputStream("E:/JAVA/AAA/迟到.txt")); //记录迟到的本子 Scanner sc=new Scanner(System.in); //键盘接收 SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); Date date=sdf.parse(setName); //指定时间 //在指定时间之前到的 while(new Date().before(date) && count1<5) { System.out.println("请签到:"); dos1.writeUTF(sc.next()); count1++; } //迟到 while(new Date().after(date) && count2<5-count1) { System.out.println("请签到:"); dos2.writeUTF(sc.next()); count2++; } } //读入 public static void read() throws IOException { DataInputStream dis1=new DataInputStream(new FileInputStream("E:/JAVA/AAA/签到.txt")); DataInputStream dis2=new DataInputStream(new FileInputStream("E:/JAVA/AAA/迟到.txt")); for(int i=0;i<count1;i++) { System.out.println("正常签到:"+dis1.readUTF()); } for(int i=0;i<count2;i++) { System.out.println("迟到:"+dis2.readUTF()); } } } //第二种,ArrayList签到 class SignIn02{ public static void signIn(String setName) throws ParseException { ArrayList<String> al1=new ArrayList<>(); //记录正常签到的姓名 ArrayList<String> al2=new ArrayList<>(); //记录迟到的姓名 Scanner sc=new Scanner(System.in); SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); Date date=sdf.parse(setName); //指定时间 int count1=0; //记录正常签到的人数 int count2=0; //记录迟到的人数 //在指定时间之前到的 while(new Date().before(date) && count1<5) { System.out.println("请签到:"); al1.add(sc.next()); count1++; } //迟到 while(new Date().after(date) && count2<5-count1) { System.out.println("请签到:"); al2.add(sc.next()); count2++; } System.out.println("正常签到:"+al1); System.out.println("迟到:"+al2); } } //第三种,HashMap签到 class SignIn03{ public static void signIn1(String setTime,int num) throws ParseException { HashMap<String,String> hm1=new HashMap<>(); //记录正常的姓名和到达时间,时间转为字符串形式 HashMap<String,String> hm2=new HashMap<>(); //记录迟到的姓名和到达时间,时间转为字符串形式 Scanner sc=new Scanner(System.in); SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); Date date=sdf.parse(setTime); //设置指定时间 int count1=0; //正常签到人数 int count2=0; //迟到人数 //在指定时间之前到的 while(new Date().before(date) && count1<num) { System.out.println("请签到:"); hm1.put(sc.next(),sdf.format(new Date())); count1++; } //迟到 while(new Date().after(date) && count2<num-count1) { System.out.println("请签到:"); hm2.put(sc.next(),sdf.format(new Date())); count2++; } System.out.println(count1+"人正常签到:"+hm1); System.out.println(count2+"人迟到:"+hm2); } } //这是选HashMap测试一下 public class Test { public static void main(String[] args) throws ParseException{ //指定时间,应该签到人数 SignIn.signIn03("2019-11-01 21:50:00",5); } }运行结果:
有点小瑕疵,就是当系统让签到的时候,就已经分配好了迟到还是没有迟到,bbb这个人实际签到时间是在指定时间之后的,但是分在了正常签到里面,想进一步的话,可以获取使用 get(key)方法,取出对应的value值,与指定时间比较
