0

式を評価するための正しい構文は何ですか?

public double evaluate(){
    String ans = (expressionOne.getValue())+""+(SignOperator.getName())+""+expressionTwo.getValue()+"";

    return Double.parseDouble(ans);
}

たとえば、expressionOne は X で、彼の値は 5.5 であり、expressionTwo は、たとえば Y で、彼の値は 9.0 です。いくつかの式を評価しようとすると、次のようになり
ます:スレッド「メイン」での例外java.lang.NumberFormatException:入力文字列の場合:「5.5+9.0」

2番目の部分は、作成した式を出力したいときです toString()

public String toString() {
    String ans = expressionOne.toString()+""+SignOperator.getName()+""+expressionTwo.toString()+"";
    return ans;
}

例:

    Variable x = new Variable ('x',5.5);
    Variable y = new Variable ('y', 3.5);
    Constant  nine= new Constant (9.0);
    Operator plus=new Operator('+');


    BinaryExpression xPy = new BinaryExpression(x, plus, y);
    BinaryExpression xP9 = new BinaryExpression(x, plus,nine);

xPyを印刷すると、x + yが得られます。xP9を印刷すると、x + 9が返されます(9は一定であるため)。
1つのtoStringで、式が定数(単なる数値)または変数(例のように)であるかどうかを確認する方法-それを検出する方法は? .

編集
ご覧のとおり、BinaryExpressionには2種類あります-そのうちの1つはxPy-xとyは2つの変数です。それらを評価したい場合は、たとえば( 3.0+5.0 )が表示されますが、印刷すると2 番目の例 xP9 の x+y を教えてください - 評価すると (3.0+9.0) が得られますが、出力すると ( x + 9.0 ) が得られます。 .

ありがとう。

4

4 に答える 4

0

これが、式全体を評価して結果を提供しようとする場所に役立つことを願っています。

以下の投稿で使用されているように、スクリプト エンジンを使用できる式エバリュエーター エンジンを作成しようとしているとのことですが、

文字列式を評価するためのスクリプト エンジンの使用

于 2013-01-03T09:11:50.753 に答える
0

evaluate() で操作を説明する文字列を作成するのはなぜですか? そこで倍精度で操作を行う必要があります。

クラス Operator にメソッドを追加することをお勧めします。

double apply(double left, double right) 

適切な実装クラスで。

Operator plus = new Operator('+')
{
    double apply(double left, double right) { return left + right; }
};

次に、評価メソッドで apply を呼び出すだけです

于 2013-01-03T09:08:23.633 に答える
0

評価の場合は、自分自身を評価する必要がありますDouble.parseDouble()。式を評価して結果を返すことはありません。

Double.parseDouble()double として表現可能な文字列を取ります (「1223.456」は確かに double 値であり、文字列形式ですが、「123.45+153.4」は無効な double 値にする「+」文字が含まれているためではありません)

1つのtoStringで、式が定数(単なる数値)か変数かを確認する方法

メソッドを使用Character.isDigit()して、式が数値(数字)か変数(非数字)かを知ることができます

Characterクラス API ドキュメントを参照してください

于 2013-01-03T09:03:26.587 に答える
-1

infix算術評価器を作成する場合は、postfix記法を調べてください。例えば:

修正記法では:

y = 4 + 9 + 3 / 6 * 5;

修正後記法:

y = 4 9 3 6 / 5 * + +;

参照 http://scriptasylum.com/tutorials/infix_postfix/algorithms/infix-postfix/index.htm

于 2013-01-03T09:09:54.063 に答える