一、题目
1.原题
公司用一个字符串来表示员工的出勤信息:
absent:缺勤
late:迟到
leaveearly:早退
present:正常上班
现需根据员工出勤信息,判断本次是否能获得出勤奖,能获得出勤奖的条件如下:
缺勤不超过一次;
没有连续的迟到/早退;
任意连续7次考勤,缺勤/迟到/早退不超过3次。
2.题目理解
能获得出勤奖的条件如下:
1.缺勤不超过一次:所有出勤记录中absent出现次数小于等于1;
2.没有连续的迟到/早退:late与leaveearly不连续出现;
3.任意连续7次考勤,缺勤/迟到/早退不超过3次:任意连续七次,absent/late/leaveearly出现次数不超过3。
二、思路与代码过程
1.思路
HashMap 循环遍历
2.代码过程
import java.util.Arrays;
import java.util.HashMap;
public class test30 {
public static void main(String[] args) {
String AttendanceInfo =
"absent "+
"present " +
"late " +
"present " +
"leaveearly " +
"present " +
"late " +
"present " +
"leaveearly " +
"present " +
"late " +
"present " +
"leaveearly " +
"present " +
"late " +
"present " +
"late " +
"present " +
"leaveearly " +
"present " +
"late " +
"present " +
"leaveearly " +
"present " +
"late " +
"present " +
"leaveearly " +
"present " +
"late " +
"present "+
"leaveearly ";
String[] attendanceInfo = AttendanceInfo.split(" ");
HashMap<String,Integer> attendance = new HashMap<>();
//初始化
attendance.put("present", 0);
attendance.put("absent", 0);
attendance.put("late", 0);
attendance.put("leaveearly", 0);
//1.缺勤不超过一次
boolean absentTime = false;
for (int i = 0; i < attendanceInfo.length; i++) {
String ATstatus = attendanceInfo[i];
if (attendance.containsKey(ATstatus)) {
attendance.put(ATstatus, attendance.get(ATstatus) + 1);
}
}
System.out.println(attendance);
if (attendance.get("absent") > 1) {
absentTime = true;
}
System.out.println("是否缺勤超过一次:"+absentTime);
//2.没有连续的迟到/早退
boolean connectLL = false;
for (int i = 0; i < attendanceInfo.length-1; i++) {
if ((attendanceInfo[i].equals("late")&&attendanceInfo[i+1].equals("leaveearly"))
||(attendanceInfo[i].equals("leaveearly")&&attendanceInfo[i+1].equals("late"))) {
connectLL = true;
}
}
System.out.println("是否有连续迟到/早退:"+connectLL);
//3.任意连续7次考勤,缺勤/迟到/早退不超过3次
boolean ThreeInSeven = false;
for(int i = 0; i < attendanceInfo.length-1; i++) {
int count = 0 ;
for (int j = i; j < i+7&&j<attendanceInfo.length; j++) {
if (attendanceInfo[j].equals("absent")
||attendanceInfo[j].equals("late")
||attendanceInfo[j].equals("leaveearly")) {
count++;
}
}
if (count >3) {
ThreeInSeven = true;
}
}
System.out.println("是否任意连续7次考勤,缺勤/迟到/早退超过3次:"+ThreeInSeven);
if (!absentTime&&!connectLL&&!ThreeInSeven) {
System.out.println("该员工本次能获得出勤奖。");
}else {
System.out.println("该员工本次不能获得出勤奖。");
}
}
}