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

Java实现仅允许指定年龄通过的校验 现有逻辑报错排查

问题原因

你的判断条件使用了错误的逻辑运算符:当前用的||(或运算符)会导致所有输入的年龄都会触发异常。
对于任意整数类型的age来说,age != 20 || age != 30 || age != 40的结果永远为真:不存在一个整数可以同时等于20、30、40三个值,所以不管输入什么年龄,这个if条件都会成立,直接抛出异常。
比如你输入30的时候,age != 20的结果已经是真,或运算只要有一个条件为真整体就为真,自然会走到抛异常的分支。

修复方案

把条件中的||替换为&&(与运算符)即可,逻辑是「年龄不是20 并且不是30 并且不是40」的时候才判定为非法:

private static void validateAge(final int age) {
    if (age != 20 && age != 30 && age != 40 ) {
        throw new IllegalArgumentException("invalid age " + age);
    }
}

也可以用更符合直觉的写法,先判断年龄是否属于允许的范围,不属于再抛异常:

private static void validateAge(final int age) {
    if (!(age == 20 || age == 30 || age == 40)) {
        throw new IllegalArgumentException("invalid age " + age);
    }
}

两种写法符合德摩根逻辑转换规则,运行效果完全一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 09:15:08