-8

"3. 编写一个方法,取三个实数 a、b 和 c 表示二次方程 ax2 + bx + c 的系数,并使用二次公式确定方程 ax2 + bx + c = 0 的一个解。使用一个 if 语句,以确保程序对所有数字输入都正确工作。”


这是我的代码,但是当我输入数字时,我得到的答案是 0

public int quadraticEquation(int a, int b, int c)
{
    if (a <= 0 && b<=0 && c<=0){
    System.out.println("Must be a real number");
    } else if(
    (a*(x^2))+(b*x)+c==0);
    return x;
}
4

4 回答 4

5

这里有多个问题:

  • 您对解决方案真实性的检查是有缺陷的。-x^2 - 2x - 1具有所有负系数,但其解是实数。

  • 我没有x在任何地方看到声明,这是否编译?

  • x^2不是“x平方”,而是“x 按位异或 2”。在进一步做任何事情之前,您应该学习 Java 。

  • 你在else if这里有一个杂散的分号:(a*(x^2))+(b*x)+c==0);

  • 你必须非常幸运才能返回x

  • 该作业要求您输入三个数,但您将参数声明为int。这不好。

  • 计算解的正确公式是:

    在此处输入图像描述

总而言之,你想要这样的东西:

public double solveQuadratic(double a, double b, double c)
{
    double D = b * b - 4 * a * c;
    if (D < 0)
        throw new RuntimeException(); // complex solution

    return (-b + Math.sqrt(D)) / (2 * a);
}

上面的代码未经测试,我不会说 Java,只是从谷歌收集的东西。

编辑:在这里测试,它似乎给出了与WolframAlpha相同的解决方案。

于 2013-08-22T04:50:07.377 回答
0

首先,二次方程中有两个根(x 的值)。你必须找到那两个。该根可以是实根,也可以是基于b*b-4*a*c正或负的虚根。由于 a*x^2+b*x+c=0 的解是x=[-b+squareroot(b^2-4*a*c)]/2*aor x=[-b-squareroot(b^2-4*a*c)]/2*a。所以如果 没有真正的价值b^2-4*a*c<0。你应该先学会这个。按照这个链接

你可以做这样的事情

public static void main(String[] args) {
    Double[] result = quadraticEquation(4, 8, 1);
    if(result==null){
        System.out.println("There is no real roots for x");
    }else{
        for(Double d:result){
            System.out.println("value for x:" +d);
        }
    }

}

public static Double[] quadraticEquation(int a, int b, int c) {
    Double[] arr = new Double[2];
    if ((b*b - (4 * a * c)) < 0) {
        return null;
    } else {
        arr[0] = (-b + Math.sqrt((b*b - 4 * a * c))) / 2 * a;
        arr[1] = (-b - Math.sqrt((b*b - 4 * a * c))) / 2 * a;
    }
    return arr;
}

我不知道你为什么只想要一个解决方案。如果你真的想要一个,你可以这样做。

  public static void main(String[] args) {
    Double result = quadraticEquation(4, 8, 1);
    if(result==null){
        System.out.println("There is no real roots for x");
    }else{           
            System.out.println("a value for x:" +result);           
    }

}

public static Double quadraticEquation(int a, int b, int c) {
    Double val =0.0;
    if ((b*b - (4 * a * c)) < 0) {
        return null;
    } else {
        val = (-b + Math.sqrt((b*b - 4 * a * c))) / 2 * a;

    }
    return val;
}
于 2013-08-22T05:03:20.807 回答
0

您需要使用二次公式来求解零点,即

(-b +- sqrt(b^2 - 4ac)) / 2a

我不会为你解决这个问题,但我会为你指出正确的方向。您需要知道的是,您可以使用 Math.sqrt() 函数计算平方根。您拥有所有其他变量

int numerator = -b + Math.sqrt(b*b - 4*a*c);
int denominator = 2*a

int result = numerator / denominator; //(this is integer division, I hope you understand)

现在只需将其放入代码中。

于 2013-08-22T04:48:37.780 回答
-1

所以你要返回 x。x 在哪里设置?它不在此代码中。

也许你想要类似的东西:

x = (a*(x^2))+(b*x)+c;
于 2013-08-22T04:47:42.967 回答