You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java中使用Scanner获取输入时如何嵌套if语句校验薪资与工时合法性

修正方案

你现有代码的核心问题有两个:

  1. 时薪部分没有加数值范围校验
  2. 周工时的校验条件逻辑错误,且校验后的布尔值被后续代码覆盖,导致校验不生效

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 22:15:05