如何在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; } }
核心逻辑说明
- zeroCount变量:专门记录当前0分的人数,初始值为0,所有Setter操作都会更新这个变量。
- checkZeroCountRule方法:把四个Setter的重复逻辑抽离,处理两种关键场景:
- 当新分数设为0且该人之前不是0分时,先检查当前0分人数是否已达3,达到则抛出异常,未达到则增加计数。
- 当新分数不是0但该人之前是0分时,减少0分计数(因为这个人不再是0分)。
- 异常选择:使用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
相关产品推荐
相关产品推荐

