5

私はJavaに非常に慣れておらず、方程式を取り、それを評価する計算機を構築しています。

Scannerメソッドを使用して入力を取得していますが、これは入力がScannerタイプであることを意味します。評価できるように、この入力をどうすればよいですか?そして、それを評価できたら、どうすれば角かっこを優先できますか?

たとえば、方程式(5 *(4 + 3))* 2の場合、プログラムで最初に(4 + 3)を評価し、次に4を掛けてから、すべてに2を掛けます。

どうもありがとう。

4

3 に答える 3

3

必要なのは、ダイクストラの操車場アルゴリズムです。これにより、修正後の数学表記が修正後の表記に変換されます。修正後の表記ではどちらも必要ないため、演算子の優先順位と角かっこに関するすべての問題が適切に分類されます。ウィキペディアのページには、Javaに変換できるCの完全な例があります。

于 2013-01-01T23:04:43.940 に答える
1

これは役立つと思います:ポーランド記法逆ポーランド記法。文字列をツリーで分割し、一度に1つのステップを実行する方法のアイデアを説明します。

于 2013-01-01T23:01:34.020 に答える
1

DijkstraのShunting Yardアルゴリズムを使用するという@Simon Gの提案は、それを釘付けにしました。シンボルを解析するために「マイクロ文法」を実装する必要がありますがScanner、作業の 95% を行うことができます。

別の方法として、ANTLR や Javacc などのパーサー ジェネレーターを使用して式パーサーを実装し、ツリーのトラバーサルとして評価を実装することもできます。ただし、式を 1 回評価するだけの場合は、かなり負荷がかかります。

最後に、これはよく知られている (解決済みの) 問題ですが、どの言語でも簡単な問題ではないことに注意してください。そして、これは、知識を完成させるために、アルゴリズムやコンパイラについてさらに読む必要があることを示しているのかもしれません。

于 2013-01-01T23:47:43.130 に答える