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

为何这段寻找毕达哥拉斯三元组的Java代码无法运行?

排查你的毕达哥拉斯三元组Java代码问题

我帮你梳理下代码里的几个关键问题,这些问题要么导致编译失败,要么让你找不到正确结果:

1. 语法错误:未完成的输出语句

你的main方法最后一行是System.out.pr...,这明显是没写完的代码,Java编译器会直接报错。得补全成完整的输出语句,比如打印找到的三元组或者它们的乘积:

System.out.println("找到三元组:a=" + a + ", b=" + b + ", c=" + c);
// 如果需要题目要求的乘积,也可以加一行:
System.out.println("三元组乘积:" + a*b*c);

2. 循环范围过小,无法覆盖目标三元组

你把a、b、c的循环上限都设为200,但符合条件的三元组是(200, 375, 425)——其中b=375和c=425都远大于200,你的循环根本遍历不到这个范围,自然找不到结果。

根据a < b < c且a+b+c=1000的性质,可以推导合理的循环范围:

  • a的最大上限应该小于1000/3 ≈ 333(因为a是三个数里最小的,不能超过总和的三分之一)
  • b要大于a,且小于(1000 - a)/2(因为b < c,所以b必须小于总和减a后的一半)
  • c可以直接用1000 - a - b计算,不需要单独循环,还能减少一层循环提升效率

3. 循环初始值不合理

你从0开始循环,但毕达哥拉斯三元组是正整数(0参与的话会导致b=c,不符合b < c的条件),所以a、b应该从1开始。

修正后的完整代码

这里给你调整后的代码,解决了所有问题:

public class Problem9 {
    public static boolean isTriplet(int a, int b, int c) {
        // 确保a < b < c且满足勾股定理
        return (a * a + b * b == c * c) && (a < b) && (b < c);
    }

    public static void main(String[] args) {
        int targetSum = 1000;
        // 遍历a的合理范围
        for (int a = 1; a < targetSum / 3; a++) {
            // 遍历b的合理范围,b必须大于a且小于(targetSum - a)/2
            for (int b = a + 1; b < (targetSum - a) / 2; b++) {
                int c = targetSum - a - b;
                if (isTriplet(a, b, c)) {
                    System.out.println("找到毕达哥拉斯三元组:a=" + a + ", b=" + b + ", c=" + c);
                    System.out.println("三元组乘积:" + (long)a * b * c); // 用long避免整数溢出
                    return; // 找到唯一解后直接退出
                }
            }
        }
        System.out.println("未找到符合条件的三元组");
    }
}

这段代码会输出正确的三元组(200, 375, 425)以及它们的乘积31875000。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 09:35:00