如何正确实现判断两个数值是否在指定偏差范围内的布尔函数?
分析并修正
withinRange函数的逻辑问题 嘿,我来帮你梳理下这个函数里的问题,然后给出修正方案:
1. 最核心的逻辑错误:无效的连续比较表达式
原代码里的if(input2 + deviation < input1 - deviation < input2)完全不符合Java的语法逻辑,也偏离了需求本意。在Java中,连续比较会被拆解成(input2 + deviation < input1 - deviation) < input2——左边的布尔值会被自动转成0或1再和input2比较,这显然不是我们要的“判断两个数是否在偏差范围内”的逻辑。
2. 冗余的大小交换逻辑
原代码用了三段if-else来确保input1是较大值,其实可以简化成更简洁的写法,不用额外的相等判断分支。
3. 偏差范围的正确逻辑
需求的本质是:两个数值的差值的绝对值不超过给定的偏差,也就是较大数减去较小数的结果 ≤ 设定的偏差值。
修正后的函数代码
先给你一个可读性强的版本:
boolean withinRange(double input1, double input2, double deviation) { // 确保input1是较大值,input2是较小值 if (input1 < input2) { double temp = input1; input1 = input2; input2 = temp; } // 核心判断:两数的差值不超过允许的偏差 return (input1 - input2) <= deviation; }
如果追求极致简洁,可以直接用绝对值跳过交换步骤:
boolean withinRange(double input1, double input2, double deviation) { return Math.abs(input1 - input2) <= deviation; }
测试示例验证
你提到的调用withinRange(2,3,2):两数差值为1,小于等于偏差2,返回true,完全符合预期。再比如调用withinRange(6,2,3),差值为4大于3,返回false,也符合逻辑。
内容的提问来源于stack exchange,提问作者Bassusour
相关产品推荐
相关产品推荐

