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

Java布尔逻辑实现考勤判定考试资格代码优化求助

现有代码缺陷说明

  • 分支逻辑冲突:两个if判断相互独立,当出勤率达标且无就医原因时,会先后输出允许考试、不允许考试两条矛盾结果
  • 输入不符合需求:需求要求就医原因输入Y/N,当前代码要求输入true/false,和需求要求不符
  • 缺少边界校验:未校验总课程数为0、出勤数大于总课程数等非法输入,可能触发运行异常
  • 出勤率输出未格式化,默认展示多位小数,可读性差

优化后代码

package A;
import java.util.Scanner;
public class Practice5 {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        
        // 输入校验:总课程数
        System.out.println("请输入已举办的课程总数:");
        int totalClass = scanner.nextInt();
        if (totalClass <= 0) {
            System.out.println("已举办课程总数不能小于等于0");
            scanner.close();
            return;
        }
        
        // 输入校验:出勤课程数
        System.out.println("请输入学生出勤的课程数:");
        int attendClass = scanner.nextInt();
        if (attendClass < 0 || attendClass > totalClass) {
            System.out.println("出勤课程数不能小于0,也不能大于已举办的课程总数");
            scanner.close();
            return;
        }
        
        // 就医原因输入,适配Y/N的需求
        System.out.println("学生是否有就医原因?请输入Y(是)或N(否):");
        String medicalInput = scanner.next().trim().toUpperCase();
        boolean hasMedicalCause = "Y".equals(medicalInput);
        
        // 计算出勤率,保留两位小数
        double attendanceRate = (double) attendClass / totalClass * 100;
        String formattedRate = String.format("%.2f", attendanceRate);
        
        // 统一判断考试资格:出勤率≥75% 或者 有就医原因,就允许考试
        if (attendanceRate >= 75 || hasMedicalCause) {
            System.out.printf("你具备考试资格,出勤率为%s%%%n", formattedRate);
        } else {
            System.out.printf("你不具备考试资格,出勤率为%s%%%n", formattedRate);
        }
        
        scanner.close();
    }
}

优化点说明

  • 合并了判断逻辑,用||(或)逻辑统一校验考试资格,避免分支冲突
  • 就医原因输入适配需求,支持Y/N输入,自动忽略大小写和首尾空格
  • 增加了所有输入项的合法性校验,避免非法输入导致的程序异常
  • 出勤率格式化保留两位小数,输出更易读
  • 变量名改为语义化命名,代码可维护性更高

内容的提问来源于stack exchange,提问作者Harsh Dalal

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.21 02:15:04