2017杭电计算机研究生复试笔试编程题第二题(JAVA)

本文介绍了一个Java程序,用于分析员工的上下班时间。通过输入员工的ID及上下班的具体时间,程序能够找出最早到岗、最晚离岗以及工作时间最长的员工,并输出相关信息。
输入N个员工,每个员工输出ID号,上班时间,下班时间,
第一行输出 最早去的员工的ID和上班时间
第二行输出 最迟走的员工的ID和下班时间
第三行输出 工作最久的员工的ID和上班时间
(数据瞎编的)
sample input:
ID100001, 07:00:00 17:00:00
ID100002, 08:00:00 18:00:00
ID100003, 09:00:00 21:00:00
sample out:
OPEN:ID100001,  07:00:00
CLOSE:ID100003,  21:00:00

STAR:ID100003,  12:00:00

import java.util.*;
public class Exam2017Num2 {
    public static void main(String args[]){
        Scanner sc = new Scanner(System.in);
        int n=sc.nextInt();
        String id;
        String comeTime;
        String goTime;
        int early=0,late=0,max=0;
        List<Employ> employs=new ArrayList<>();
        for(int i=0;i<n;i++){
            id=sc.next();
            comeTime=sc.next();
            goTime=sc.next();
            Employ employ=new Employ(id,comeTime,goTime);
            employs.add(employ);
            id=sc.nextLine();
        }
        for(int i=1;i<n;i++){
            if(employs.get(i).getComeTime()<employs.get(i-1).getComeTime())early=i;
            if(employs.get(i).getGoTime()>employs.get(i-1).getComeTime())late=i;
            if(employs.get(i).getWorkTime()>employs.get(i-1).getWorkTime())max=i;
        }
        System.out.println("Early:"+employs.get(early).getId()+" "+employs.get(early).getComeTimeStr());
        System.out.println("Late:"+employs.get(late).getId()+" "+employs.get(late).getGoTimeStr());
        System.out.println("Max:"+employs.get(max).getId()+" "+employs.get(max).getWorkTimeStr());
    }

    private static class Employ{
        private String id;
        private String comeTime;
        private String goTime;

        Employ(String id,String comeTime,String goTime){
            this.id=id;
            this.comeTime=comeTime;
            this.goTime=goTime;
        }

        int timeChange(String str){
            int time=0;
            int sec=0;
            for(int i=0;i<str.length();i++){
                if(str.charAt(i)>='0'&&str.charAt(i)<='9'){
                    time=time*10+Integer.parseInt(String.valueOf(str.charAt(i)));
                    if(i%2!=0){
                        sec=sec*60+time;
                        time=0;
                    }
                }
            }
            return sec;
        }

        int getComeTime(){
            return timeChange(comeTime);
        }

        int getGoTime(){
            return timeChange(goTime);
        }

        int getWorkTime(){
            return timeChange(goTime)-timeChange(comeTime);
        }

        String getWorkTimeStr(){
            String WorkTimeStr;
            int WorkTime=timeChange(goTime)-timeChange(comeTime);
            if (WorkTime>=3600){
                WorkTimeStr=String.valueOf(WorkTime/3600);
                WorkTimeStr=WorkTimeStr+":";
                WorkTime=WorkTime%3600;
            }
            else {
                WorkTimeStr="00:";
            }
            if (WorkTime>60){
                WorkTimeStr=String.valueOf(WorkTime/60);
                WorkTimeStr=WorkTimeStr+":";
                WorkTime=WorkTime%60;
            }
            else {
                WorkTimeStr=WorkTimeStr+"00:";
            }

            WorkTimeStr=WorkTimeStr+String.format("%02d",WorkTime);
            return WorkTimeStr;
        }

        String getId(){
            return id;
        }

        String getComeTimeStr(){
            return comeTime;
        }

        String getGoTimeStr(){
            return goTime;
        }
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值