二次方程式错误

时间:2015-09-14 20:48:20

标签: java

不完全确定如何使用本网站,所以如果问题太模糊,我道歉。

我应该使用二次方程来找到根,但每当我输入a,b和c的变量时,它都会返回错误的答案。我想知道代码中的问题是什么。

import java.util.Scanner; 
import static java.lang.System.*;
import static java.lang.Math.*;

public class Quadratic
{
 private int a, b, c;
 private double rootOne;
 private double rootTwo;

 public Quadratic()
 {
   setEquation(0,0,0);
   rootOne=0;
   rootTwo=0;
 }

 public Quadratic(int quadA, int quadB, int quadC)
 {
   setEquation(quadA, quadB, quadC);
   rootOne=0;
   rootTwo=0;
 }

 public void setEquation(int quadA, int quadB, int quadC)
 {
   a = quadA;
   b = quadB;
   c = quadC;
  }

 public void calcRoots( )
 {
   rootOne = (-b + (Math.sqrt((Math.pow(b,2)) - ((4 * a * c))))/(2*a));
   rootTwo = (-b - (Math.sqrt((Math.pow(b,2)) - ((4 * a * c))))/(2*a));
 }

 public void print( )
 {
   System.out.println("rootone :: " +rootOne);
   System.out.println("roottwo :: " +rootTwo);
 }
}

1 个答案:

答案 0 :(得分:5)

托架在错误的地方:

(-b + (Math.sqrt((Math.pow(b,2)) - ((4 * a * c))))/(2*a))

删除多余的括号,代码正在执行:

-b + Math.sqrt(Math.pow(b,2) - 4 * a * c) / (2 * a)

所以-b没有被2a划分,你可能想要:

(-b + Math.sqrt(Math.pow(b, 2) - 4 * a * c)) / (2 * a)

另外,正如Manos所提到的,int对于该类型来说不是一个很好的选择。

在这里,接近成分会有助于理解和表现:

double t1 = Math.sqrt(Math.pow(b, 2) - 4 * a * c);
double t2 = 2 * a;
rootOne = (-b + t1) / t2;
rootTwo = (-b - t1) / t2;

编程中的一种常见风格是避免代码多次执行相同的操作,尤其是幂和平方根等。