1

問題は、二次方程式の解を 2 つ書き出すことです。式でプラス演算子を使用した場合と、マイナス演算子を使用した場合の結果が 1 つあります。

私の計画は、(+) を使用する方法と (-) を使用する方法で、式の異なる結果を計算する 2 つの異なる方法を作成することでした。次に、両方のメソッドを呼び出して結果を表示したいと思います。問題は、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 first solution is" + QuadPlus(i));

それには2つの問題があります。

  1. i別のメソッドに対してローカルな変数を参照しようとしています。iメインメソッドの範囲外であるため (呼び出されたと宣言した変数はi、QuadPlus および QuadMinus メソッドの範囲内にのみあります)、Eclipse は定義を見つけることができないため、iエラーがスローされます。

  2. QuadPlus メソッドと QuadMinus メソッドはdouble、それぞれ 4 つのパラメーターを受け取るように定義されているため、呼び出すときは、パラメーター ブラケットに 4 つの double を入れる必要があります。そうでなければ、プログラムは取得しただけで a、b、... などが何であるかをどのように知ることができiますか?

最終的な呼び出しは次のようになります。

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

編集:実際にはxQuadThing メソッドでパラメーターを使用していないようです。そのため、次のように定義からそれを取り出すことができます。

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

そして、次のように呼び出します。

QuadPlus(a, b, c);

編集2:また、

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

... は、2 次式のように全体ではなく、平方根のみを 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 に答える
1

次のように、正しい引数で関数を呼び出す必要があります。

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

パラメータ x を使用していません。

于 2012-10-28T23:49:56.723 に答える
0

二次方程式の解を書くことが問題である場合は、考えられるさまざまな結果に注意する必要があります。2つのソリューション、1つのソリューションまたは0のソリューションを持つことができます。

これを処理するために、判別式をチェックできます:d = b * b-4 * a * c

  • d == 0 =>ソリューションが1つある場合は、それを印刷します(dと0のチェック/比較方法に注意してください)
  • d> 0 => 2つの解がある場合は、両方を印刷します
  • d <0 =>ソリューションが0の場合、メッセージを出力します

さらにいくつかの障害(浮動小数点のキャンセル、オーバーフローなど)がありますが、エントリーレベルの演習として、詳細については気にしないでください。

--tb

于 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 に答える
0

「double x」は使用されていないため、メソッド パラメーターで削除できます。次に、関数を次のように呼び出す必要があります。 double i=QuadPlus(a, b, c); また、 double a=read double... を使用します。

于 2012-10-28T23:52:53.837 に答える