不能完全确定如何使用该网站,因此,如果问题过于模糊,我深表歉意。
我应该使用二次方程式求根,但是每当我输入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);
}
}
最佳答案
括号放在错误的位置:
(-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;
这是编程中的一种常见样式,可避免让代码多次执行相同的操作,尤其是幂和平方根之类的事情。