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

如何在Java中用条件语句限制最多3个Setter设置0分?

实现步骤与代码示例

你可以通过在Marks类中维护0分人数统计变量,并在每个Setter方法中添加校验逻辑来实现需求,具体代码和说明如下:

Marks类完整实现

public class Marks {
    // 存储四个人的分数
    private int james;
    private int peter;
    private int rayn;
    private int layla;
    // 统计当前0分的人数
    private int zeroCount = 0;

    public void setJames(int score) {
        checkZeroCountRule(james, score);
        james = score;
    }

    public void setPeter(int score) {
        checkZeroCountRule(peter, score);
        peter = score;
    }

    public void setRayn(int score) {
        checkZeroCountRule(rayn, score);
        rayn = score;
    }

    public void setLayla(int score) {
        checkZeroCountRule(layla, score);
        layla = score;
    }

    // 封装0分校验与计数更新逻辑,避免重复代码
    private void checkZeroCountRule(int oldScore, int newScore) {
        // 新分数设为0,且旧分数不是0(需要新增0分计数)
        if (newScore == 0) {
            if (oldScore != 0) {
                if (zeroCount >= 3) {
                    throw new IllegalArgumentException("不能为4个人设置0分");
                }
                zeroCount++;
            }
            // 旧分数已经是0,重复设0不需要改计数,直接跳过
        } else {
            // 新分数不是0,但旧分数是0(需要减少0分计数)
            if (oldScore == 0) {
                zeroCount--;
            }
        }
    }

    // 可选:添加Getter方法用于验证分数设置结果
    public int getJames() { return james; }
    public int getPeter() { return peter; }
    public int getRayn() { return rayn; }
    public int getLayla() { return layla; }
}

核心逻辑说明

  1. zeroCount变量:专门记录当前0分的人数,初始值为0,所有Setter操作都会更新这个变量。
  2. checkZeroCountRule方法:把四个Setter的重复逻辑抽离,处理两种关键场景:
    • 当新分数设为0且该人之前不是0分时,先检查当前0分人数是否已达3,达到则抛出异常,未达到则增加计数。
    • 当新分数不是0但该人之前是0分时,减少0分计数(因为这个人不再是0分)。
  3. 异常选择:使用Java自带的IllegalArgumentException,这是符合规范的非法参数异常,用来表示传入的参数不符合要求。

测试示例

public class TestMarks {
    public static void main(String[] args) {
        Marks marks = new Marks();
        // 设置3个0分,正常执行
        marks.setJames(0);
        marks.setPeter(0);
        marks.setRayn(0);
        
        // 尝试设置第4个0分,触发异常
        try {
            marks.setLayla(0);
        } catch (IllegalArgumentException e) {
            System.out.println(e.getMessage()); // 输出:不能为4个人设置0分
        }

        // 修改已有0分的人的分数,再设置新的0分,正常执行
        marks.setJames(5);
        marks.setLayla(0);
        System.out.println("Layla的分数:" + marks.getLayla()); // 输出:0
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 14:41:33