Java薪资计算器开发:如何在if-else if语句内嵌套if语句
薪资计算器实现方案
需求梳理
- 未满18周岁的申请人无加班费,且所在州规定未成年人最高工作时长为18小时,超出部分不计薪
- 年满18周岁的申请人,工作满40小时以上的部分按1.5倍薪资计发加班费,40小时及以内按正常薪资核算
现有代码问题梳理
- 未成年人判断逻辑错误:
if(17 > age)仅判断了年龄小于17岁的场景,未覆盖17岁未满18岁的群体,应改为age < 18 - 缺少未成年人工作时长超出18小时的校验处理,不符合当地用工规定
- 成年人分支逻辑冗余:外层已经判断
totalHours > 40,内层重复判断相同条件无意义 - 逻辑分支覆盖不全:缺少年满18周岁且工作时长≤40小时的处理分支,该场景下变量未赋值会导致编译报错
- 语法错误:输出语句存在字符串拼接格式错误,多余的加号、换行符位置不对
- 姓名读取逻辑有瑕疵:读取名字后未对姓氏内容做去空格处理,可能出现多余的前置空格
修正后完整代码
import java.util.Scanner; public class SalaryV2 { public static void main(String[] args) { // 声明初始化变量 double totalSalary; boolean isOvertime; Scanner in = new Scanner(System.in); // 输入部分 System.out.print("请输入您的姓名(名 姓):"); String firstName = in.next(); String lastName = in.nextLine().trim(); System.out.print("请输入您的年龄:"); double age = Double.parseDouble(in.nextLine()); System.out.print("\n请输入您的小时薪资:"); double payRate = Double.parseDouble(in.nextLine()); System.out.print("\n请输入您的工作时长:"); double totalHours = Double.parseDouble(in.nextLine()); System.out.println(); // 业务逻辑处理 if(age < 18) { isOvertime = false; // 未成年人最高工作时长校验 if(totalHours > 18) { System.out.println("提示:根据规定未成年人最高工作时长为18小时,超出部分不计薪"); totalHours = 18; } totalSalary = totalHours * payRate; } else { if(totalHours > 40) { isOvertime = true; totalSalary = 40 * payRate + (totalHours - 40) * payRate * 1.5; } else { isOvertime = false; totalSalary = totalHours * payRate; } } // 输出部分 System.out.print("员工姓名:" + lastName + "," + firstName + "\n"); System.out.print("工作时长:" + totalHours); System.out.println("\t\t是否加班:" + isOvertime); System.out.println("总薪资:" + totalSalary); in.close(); } }
内容的提问来源于stack exchange,提问作者oofalladeez343
相关产品推荐
相关产品推荐

