Java员工薪资计算代码求助:补全getPay方法超工时逻辑
解决员工薪资计算中工作日超时薪资的逻辑问题
我来帮你搞定这个薪资计算的逻辑漏洞!首先咱们再明确下核心规则:
- 工作日(周一至周五,对应
hours数组的0-4索引)总工时:≤40小时的部分按基础时薪payRate结算,超过40小时的部分按1.5倍时薪(time-and-a-half)结算 - 周末工时按2倍时薪结算
- 全周7天都工作加50美元奖金
你当前的getPay方法有两个问题:一是工作日工时≤40小时的部分完全没计算,二是超时部分的逻辑未补全。下面是修正并补全后的完整getPay方法:
public double getPay() { double totalPay = 0.0; double timeHalf = payRate * 1.5; double timeDouble = payRate * 2.0; final double BONUS = 50.00; // 1. 计算工作日薪资(含超时部分) double weekdayHours = getWeekdayHours(); if (weekdayHours <= 40) { totalPay += weekdayHours * payRate; } else { // 40小时按基础时薪,超出部分按1.5倍 totalPay += 40 * payRate + (weekdayHours - 40) * timeHalf; } // 2. 计算周末薪资 totalPay += getWeekendHours() * timeDouble; // 3. 检查全勤奖金 if (getNumDaysWorked() == 7) { totalPay += BONUS; } return totalPay; }
补充说明:
- 简化逻辑:不需要用多个
if判断是否有工时(比如getWeekendHours() > 0),直接累加即可——如果工时为0,这部分贡献就是0,不影响结果 - 常量命名:把奖金
50.00定义为常量BONUS,提升代码可读性和维护性 - 精度修复:顺便提一下,你现有代码里的
getTotalHours()、getWeekdayHours()、getWeekendHours()方法用了int count来累加double类型的小时数,会导致精度丢失(比如0.5小时会被截断为0),建议把这些方法里的count改成double类型:
public double getTotalHours() { double count = 0; // 这里改成double for(int i = 0; i < hours.length; i++) { count += hours[i]; } return count; }
这样整个薪资计算逻辑就完全符合需求啦!
内容的提问来源于stack exchange,提问作者Cowboy coder
相关产品推荐
相关产品推荐

