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

如何优化仅用逻辑运算符的直角三角形判定代码?

问题分析与修正方案

你的问题核心是逻辑运算符优先级导致的逻辑错误:&&的优先级高于||,所以你修改后的代码实际等价于:

boolean check = (a > 0 && b > 0 && c > 0 && a * a + b * b == c * c) 
                || (a * a + c * c == b * b) 
                || (b * b + c * c == a * a);

也就是说,只有第一个勾股判定会绑定正数校验,后面两个勾股判定完全跳过了正数检查。当输入-3 4 -5时,(-3)² + 4² = (-5)²这个条件成立,且不受正数校验约束,所以最终返回true。

修正后的代码

把三个勾股条件用括号包裹,让正数校验同时作用于所有判定逻辑:

double a = Double.parseDouble(args[0]);
double b = Double.parseDouble(args[1]);
double c = Double.parseDouble(args[2]);

boolean check = a > 0 && b > 0 && c > 0 
                && (a * a + b * b == c * c 
                    || a * a + c * c == b * b 
                    || b * b + c * c == a * a);
StdOut.println(check);

额外优化提示

用==比较浮点数存在精度风险(浮点数运算可能产生微小误差),如果要更严谨,可以用差值的绝对值小于极小值来判断近似相等,例如把a*a + b*b == c*c替换为:

Math.abs(a*a + b*b - c*c) < 1e-9

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 18:13:11