描述
公司用一个字符串来表示员工的出勤信息:
absent:缺勤
late:迟到
leaveearly:早退
present:正常上班
现需根据员工出勤信息,判断本次是否能获得出勤奖,能获得出勤奖的条件如下:
1、缺勤不超过一次;
2、没有连续的迟到/早退;
3、任意连续7次考勤,缺勤/迟到/早退不超过3次。
输入描述:
用户的考勤数据字符串
1、记录条数 >= 1;
2、输入字符串长度 < 10000;
3、不存在非法输入;
如:
2
present
present absent present present leaveearly present absent
输出描述:
根据考勤数据字符串,如果能得到考勤奖,输出”true”;否则输出”false”,
对于输入示例的结果应为:
true false
用例:
输入:
1
present absent present present leaveearly present absent
输出:
false
java代码实现
package com.des.data.test;
public class AttendanceInformation {
public static void main(String[] args) {
String str = "present present present present leaveearly present late present present late";
System.out.println(reward(str));
}
public static boolean reward(String str) {
String[] strs = str.split(" ");
int que = 0;
int l3 = 0;
//连续的迟到早退判断
if (str.toString().contains("late leaveearly") || str.toString().contains("leaveearly late")) {
return false;
}
int start = 0;
for (int i = 0; i < strs.length; i++) {
String status = strs[i];
//是否超过一次的缺勤判断
if (status.equals("absent")) {
que++;
}
if (que > 1) {
return false;
}
//任意连续7次考勤,缺勤/迟到/早退不超过3次 判断
if (i <= 6) {
start = ((strs.length < 7) ? strs.length : 7);
i = start - 1;
for (int j = 0; j < start; j++) {
if (!strs[j].equals("present")) {
l3++;
}
}
if (l3 > 2) {
return false;
}
l3 = 0;//每一个连七的窗口,这个要归零
} else {
for (int j = i - 6; j < i+1; j++) {
if (!strs[j].equals("present")) {
l3++;
}
}
if (l3 > 2) {
return false;
}
l3 = 0;//每一个连七的窗口,这个要归零
}
}
return true;
}
}