二次公式

时间:2012-10-28 23:47:27

标签: java math

问题是为二次公式写出两个解。一个结果是在公式中使用加号运算符而在使用负运算符时使用另一个运算符。

我的计划是创建两种不同的方法来计算公式的不同结果,一种方法使用(+),一种使用( - )。然后我想调用这两种方法来显示结果。问题是当我在Eclipse中调用这些方法时,它表示存在错误“我无法解析为变量”。我的问题解决方案是否正确,我是否遗漏了任何内容以及如何解决错误?

import acm.program.*;

public class QuadraticFormula extends ConsoleProgram {

public void run(){
    println("Enter the coefficients for the quadratic equation: ");
    int a = readInt("Please enter the value of a: ");
    int b = readInt("Please enter the value of b: ");
    int c = readInt("Please enter the value of c: "); 



    println("Your first solution is" + QuadPlus(i));
    println("Your second solution is" + QuadMinus(i)); 

}



private double QuadPlus (double a, double b, double c, double x){
    double i = ((+(b)) + Math.sqrt(( b * b) - (4 * a * c)) / (2 * a));


    return i;

}

private double QuadMinus (double a, double b, double c, double x) {
    double i = ((-(b)) + Math.sqrt(( b *b) - (4 * a * c)) / ( 2 * a));

    return i; 
}

}

7 个答案:

答案 0 :(得分:2)

  println("Your first solution is" + QuadPlus(i));

不知道我是什么

它知道a,b& c虽然是

  println("Your first solution is: " + QuadPlus(a,b,c));

将x从你的功能中删除

private double QuadPlus (double a, double b, double c){
    double i = ((+(b)) + Math.sqrt(( b * b) - (4 * a * c)) / (2 * a));
   return i;

}

答案 1 :(得分:2)

其他人已经回答了您的直接问题,所以我不会在此重复,但我注意到您在函数中使用的等式是不正确的。平方根结果的符号变化,而不是前面的-b。功能应该是:

private double QuadPlus (double a, double b, double c){
    return ((-b) + Math.sqrt(( b * b) - (4 * a * c))) / (2 * a);
}

private double QuadMinus (double a, double b, double c) {
    return ((-b) - Math.sqrt(( b *b) - (4 * a * c))) / ( 2 * a);
}

答案 2 :(得分:1)

您必须使用正确的参数调用该函数,如:

    println("Your second solution is" + QuadMinus(a, b, c, x)); 

您没有使用参数x。

答案 3 :(得分:1)

该行

println("Your first solution is" + QuadPlus(i));

有两件事是错的。

  1. 它试图引用一个不同方法的本地变量i。由于i超出了main方法的范围(您声明为i的变量仅在QuadPlus和QuadMinus方法的范围内),因此eclipse无法找到{{1所以它会引发你的错误。

  2. QuadPlus和QuadMinus方法定义为每个都有四个i个参数,所以当你调用它们时,你必须在参数括号中加入四个双精度数。否则,该程序将如何知道a,b,...等来自double

  3. 您的最终通话应如下所示:

    i

    编辑:您实际上似乎并未在QuadThing方法中使用参数println("Your first solution is" + QuadPlus(aDouble, bDouble, cDouble, xDouble)); ,因此您可以将其从定义中删除,例如:

    x

    然后接听电话:

    ... QuadPlus(double a, double b, double c) { ...
    

    编辑2 :此外,

    QuadPlus(a, b, c);
    

    ...只会将平方根除以2a,而不是像二次方程式那样将整数除以。要修复它,请在斜线除法之前移动最后一个括号。这适用于这两种方法。 最后,公式的+/-部分不影响前面的b; b总是(-b)。 +/-是加上还是减去平方根

    double i = ((+(b)) + Math.sqrt(( b * b) - (4 * a * c)) / (2 * a));
    

答案 4 :(得分:0)

您可以在方法参数中删除“double x”,因为它未被使用,然后您必须将该函数调用为:     double i = QuadPlus(a,b,c); 另外,使用double a = read double ...

答案 5 :(得分:0)

如果问题是要写一个二次方程的解,你应该注意不同的可能结果。您可以拥有2个解决方案,1个解决方案或0个解决方案。

要处理此问题,您可以检查判别式:d = b * b - 4 * a * c

  • 如果d == 0 =>你有一个解决方案,打印它(小心如何检查/比较d和0)
  • 如果d> 0 =>你有2个解决方案,打印它们
  • 如果d< 0 =>你有0个解决方案,打印一条消息

还有一些障碍(浮点取消,溢出等)但作为入门级练习,只是不关心深入的细节。

- TB

答案 6 :(得分:0)

这就是我的所作所为:

Math.quadform = function(a, b, c) {

  var pos = (-b + Math.sqrt(Math.pow(b, 2)-4*a*c))/2*a;
  var neg = (-b - Math.sqrt(Math.pow(b, 2)-4*a*c))/2*a;

  return {
    "positiveRoot": pos,
    "negativeRoot": neg
  };

};

使用IMO更简单,更容易。