1

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

我的计划是创建两种不同的方法来计算公式的不同结果,一种方法使用 (+),另一种方法使用 (-)。然后我想调用这两个方法来显示结果。问题是当我在 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; 
}

}

4

7 回答 7

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;

}
于 2012-10-28T23:49:19.153 回答
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);
}
于 2012-10-28T23:59:08.247 回答
1

您必须使用正确的参数调用函数,如下所示:

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

您没有使用参数 x。

于 2012-10-28T23:49:56.723 回答
1

线

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

它有两个问题。

  1. 它试图引用i不同方法的本地变量。由于i超出了 main 方法的范围(您声明调用的变量i仅在 QuadPlus 和 QuadMinus 方法的范围内),因此 eclipse 找不到定义i,因此它会抛出您的错误。

  2. QuadPlus 和 QuadMinus 方法被定义为double每个接受四个参数,因此当您调用它们时,您必须在参数括号中放置四个双精度值。否则,程序怎么会知道 a, b, ... etc 是i什么?

您最终的调用应该类似于:

println("Your first solution is" + QuadPlus(aDouble, bDouble, cDouble, xDouble));

编辑:您实际上似乎没有x在 QuadThing 方法中使用该参数,因此您可以将其从定义中删除,例如:

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

然后打电话:

QuadPlus(a, b, c);

编辑2:另外,

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

...将仅将平方根除以 2a,而不是像二次公式中的整个事物。要修复它,请移动斜线分隔之前的最后一个括号。这适用于两种方法。最后,公式的 +/- 部分不会影响前面的 b;b 始终为 (-b)。+/- 是加还是减平方根

double plus = ( (-(b)) + Math.sqrt(( b * b) - (4 * a * c)) )  / (2 * a);
double minus = ( (-(b)) - Math.sqrt(( b * b) - (4 * a * c)) )  / (2 * a);
于 2012-10-28T23:53:38.027 回答
0

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

于 2012-10-28T23:52:53.837 回答
0

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

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

  • 如果 d == 0 => 你有 1 个解决方案,打印它(注意如何检查/比较 d 和 0)
  • 如果 d > 0 => 你有 2 个解决方案,将它们都打印出来
  • 如果 d < 0 => 您有 0 个解决方案,请打印一条消息

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

--待定

于 2012-10-29T00:57:39.483 回答
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 更简单、更容易。

于 2015-03-05T17:00:49.977 回答