0

文字列を左から右に 0 から 9 までの数字と 4 つの基本的な演算子を含む整数として評価しようとしています (すべての演算子の優先順位が同じであるため、4 + 2 が最初に計算されるため、36として、または36として"5+8+(8/4)"評価する必要があります)。 )、しかし、括弧の実装に問題があります。15"9+((3+4)*5)"44"4+2*6"

かっこを含めなければ、なんとか機能させることができました。これを行うには、while ループで StringTokenizer を使用して文字列を解析します。各トークンは変数に格納され、数値が含まれている場合はスタックに追加され、演算子が含まれている場合はスタックに追加されます。次に、整数スタックに 2 つの数値がある場合、演算子スタックの演算子に基づいてそれらを評価します。文字列全体が true になるまでこのように処理されstr.hasMoreTokens()、while ループが中断されます。したがって、次のようなもの8-5+7*3+1/2-4は完全に機能しますが、括弧を式で機能させる方法が見つかりません

String newStr = str.replaceFirst("[^(]*(", "");最初のものを含めて、残っているものを再帰的に評価するなど、すべてを切り捨てようとしまし(たが、これは必要以上に複雑であり、動作させることができませんでした。何時間も考えましたが、もっと簡単な方法が思いつきません。

ありがとう、私はこの時点で完全に迷っているので、ガイダンス/提案は素晴らしいでしょう.

4

2 に答える 2

2

中置記法で数式を解析する場合は、操車場アルゴリズムを実装する必要があります。あなたのコードが見えないので、何が欠けているのか見分けるのは難しいです。

于 2013-02-27T05:36:09.167 に答える
0

他の答えがプロジェクトにとって複雑すぎると思われる場合は、Groovy スクリプト エンジンをコードに統合することをお勧めします。それ以上のことを簡単に行うことができます。

また、式を自分で解析するのではなく、Java コードと同じくらい高速に動作する必要がある場合は、オンザフライで Java クラスにコンパイルすることもできます。

http://groovy.codehaus.org/

于 2013-02-27T06:00:29.037 に答える