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

Java作业异常捕获问题:大于判定被误判为大于等于

修复Rectangle类的异常判定逻辑问题

看起来你遇到的问题很明确——条件判断的边界值写错了,导致本该被捕获的非法数值(比如-0.5、20.5)没被检测到,反而只抓了更极端的数值。咱们一步步来解决:

问题分析

你提到程序现在只能捕获-1及以下或21及以上的数值,但需求是捕获小于0或大于20的数值。这说明你的setWidth和setHeight方法里的条件判断用错了边界运算符:

  • 原本应该判断width < 0(小于0就非法),但你可能写成了width <= -1;
  • 原本应该判断width > 20(大于20就非法),但你可能写成了width >= 21;
    或者更常见的是,你在判断合法范围时混淆了运算符,比如误把非法条件写成了只捕获极端值的范围,漏掉了0到-1、20到21之间的非法数值。

修正后的代码示例

咱们直接用Java标准的IllegalArgumentException(专门处理非法参数的异常,比自定义异常更符合规范),同时修正核心的条件判断逻辑:

public class Rectangle {
    private double width;
    private double height;

    // 构造方法,调用set方法做参数校验
    public Rectangle(double width, double height) {
        setWidth(width);
        setHeight(height);
    }

    // 修正宽度的异常判定逻辑
    public void setWidth(double width) {
        // 正确判定:小于0 或者 大于20 就抛出异常
        if (width < 0 || width > 20) {
            throw new IllegalArgumentException("宽度必须在0到20之间(包含0和20)");
        }
        this.width = width;
    }

    // 同理修正高度的判定
    public void setHeight(double height) {
        if (height < 0 || height > 20) {
            throw new IllegalArgumentException("高度必须在0到20之间(包含0和20)");
        }
        this.height = height;
    }

    // 可选:添加get方法用于测试
    public double getWidth() {
        return width;
    }

    public double getHeight() {
        return height;
    }
}

测试异常捕获的示例代码

在调用方代码里,用try-catch块来捕获并处理异常:

public class Main {
    public static void main(String[] args) {
        // 测试小于0的非法宽度
        try {
            Rectangle badRect1 = new Rectangle(-0.5, 10);
        } catch (IllegalArgumentException e) {
            System.out.println("捕获到异常:" + e.getMessage());
        }

        // 测试大于20的非法高度
        try {
            Rectangle badRect2 = new Rectangle(10, 20.5);
        } catch (IllegalArgumentException e) {
            System.out.println("捕获到异常:" + e.getMessage());
        }

        // 测试合法数值
        try {
            Rectangle goodRect = new Rectangle(5, 15);
            System.out.println("矩形创建成功,宽:" + goodRect.getWidth() + ",高:" + goodRect.getHeight());
        } catch (IllegalArgumentException e) {
            System.out.println("捕获到异常:" + e.getMessage());
        }
    }
}

关键注意点

  • 边界值要精准:需求是“小于0或大于20”非法,所以条件必须是width < 0 || width > 20,这样0和20会被判定为合法,-0.5、20.5这类临界非法值也能被正确捕获;
  • 异常信息要清晰:抛出异常时给出明确的提示,方便调试时快速定位问题;
  • 复用校验逻辑:构造方法直接调用set方法,避免重复写校验代码,保持代码简洁。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 10:35:14