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

Java编写一元二次方程求解代码运行触发26个报错求助

Java一元二次方程求解代码报错排查与解决方案

核心错误原因

  • 无参构造方法未闭合:Quadratic类中的无参构造public Quadratic() { 缺少闭合的},直接定义了有参构造,导致后续所有代码结构识别异常,触发大量语法报错。
  • 方法名拼写错误:类中定义的hasSoultions、getSoultion1拼写错误(多了字母u),和QuadraticRunner中调用的hasSolutions、getSolution1名称不匹配,触发方法未定义报错。
  • 判别式逻辑完全错误:判断实根的条件错写为b*2 > 4*a*c,既没有计算b的平方,逻辑也完全颠倒:正确逻辑是当b² -4ac < 0时没有实根,返回false。
  • 系数属性错误使用static修饰:a、b、c定义为静态变量会导致所有Quadratic实例共享系数值,后创建的实例会覆盖之前实例的系数,运行结果不符合预期。
  • 未重写toString()方法:直接调用默认toString只会输出类名和哈希值,无法打印方程内容。

修复后的完整代码

Quadratic.java

public class Quadratic {
    // 去掉static修饰,改为实例变量,每个方程系数独立
    public double a;
    public double b;
    public double c;

    // 无参构造,闭合括号
    public Quadratic() {
        a = 1;
        b = 1;
        c = 1;
    }

    public Quadratic(int A, int B, int C) {
        a = A;
        b = B;
        c = C;
    }

    // 修正拼写,去掉static修饰,修正判断逻辑
    public boolean hasSolutions() {
        double delta = b * b - 4 * a * c;
        return delta >= 0;
    }

    // 修正拼写
    public double getSolution1() {
        double sqrt = Math.sqrt((b * b) - (4 * a * c));
        return (-b + sqrt) / (2 * a);
    }

    public double getSolution2() {
        double sqrt = Math.sqrt((b * b) - (4 * a * c));
        return (-b - sqrt) / (2 * a);
    }

    // 重写toString方法,输出方程格式
    @Override
    public String toString() {
        return a + "x² + " + b + "x + " + c + " = 0";
    }
}

QuadraticRunner.java 无需修改,原有代码可直接运行


运行验证

修复后三个测试用例输出完全符合预期:

  1. 1x² + 5x +6=0 实根为-2.0、-3.0
  2. 1x² + -4x +4=0 实根为2.0、2.0
  3. 1x² +0x +3=0 无实根,求解返回NaN

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 12:48:01