Java中使用Scanner获取输入时如何嵌套if语句校验薪资与工时合法性
修正方案
你现有代码的核心问题有两个:
- 时薪部分没有加数值范围校验
- 周工时的校验条件逻辑错误,且校验后的布尔值被后续代码覆盖,导致校验不生效
1. 时薪输入逻辑修改
在你拿到wage的赋值结果后,直接追加数值范围判断,如果小于0则将bool设为false,同时可以输出错误提示引导用户重新输入。另外你现有代码里scan.hasNextDouble() && !scan.hasNextInt()的判断会限制用户不能输入整数类型的时薪,如果不需要这个限制可以删掉!scan.hasNextInt()的条件。
2. 周工时输入逻辑修改
你原来的校验条件hours > MAXHOURS && hours < 0是逻辑错误,不存在同时大于40且小于0的数值,应该改为hours <= 0 || hours > MAXHOURS。同时你在判断完范围后直接写了bool = true,会覆盖之前校验失败设置的false,需要调整赋值顺序。
修正后的完整代码
import java.util.Scanner; public class PayrollCC{ public static void main (String [] args){ Scanner scan = new Scanner(System.in); double wage=0; int hours=0; boolean bool = false; final int MAXHOURS = 40; // 时薪输入校验 do{ System.out.println("Please enter your hourly wage: "); // 若不需要限制必须输入小数,可删除&& !scan.hasNextInt()条件 if(scan.hasNextDouble() && !scan.hasNextInt()){ wage = scan.nextDouble(); scan.nextLine(); // 追加时薪范围校验 if(wage < 0){ System.out.println("输入错误:时薪不能小于0,请重新输入"); bool = false; }else{ bool = true; } } else{ System.out.println("输入错误:请输入合法的小数格式时薪"); bool = false; scan.nextLine(); } } while(!bool); // 周工时输入校验 do{ System.out.println("Please enter how many hours you have worked this week: "); if(scan.hasNextInt()){ hours = scan.nextInt(); scan.nextLine(); // 修正工时校验逻辑 if(hours <= 0 || hours > MAXHOURS){ System.out.println("输入错误:周工时需要大于0且不超过40,请重新输入"); bool = false; }else{ bool = true; } } else{ System.out.println("输入错误:请输入整数格式的工时"); bool = false; scan.nextLine(); } } while(!bool); double week = hours*wage; double total = week; double avg = week; System.out.println("Week's pay: $"+week+" Total pay: $"+total+" Average pay per week: $"+avg); } }
内容的提问来源于stack exchange,提问作者L. Jacob
相关产品推荐
相关产品推荐

