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 无需修改,原有代码可直接运行
运行验证
修复后三个测试用例输出完全符合预期:
- 1x² + 5x +6=0 实根为-2.0、-3.0
- 1x² + -4x +4=0 实根为2.0、2.0
- 1x² +0x +3=0 无实根,求解返回NaN
内容的提问来源于stack exchange,提问作者Joshua Tanner
相关产品推荐
相关产品推荐

