Javaの簡単な計算機(Stackマシン編)
中置記法で書かれた計算式の計算をめざして書きます(原則計算の優先度を()で入力してもらう)
コードを書く前に計算機の仕事の流れを考えます.
1.中置記法で入力してもらう
2.中置記法を後置記法に直す //stackマシンは後置記法の命令を受け取るとする
3.後置記法をstackマシンが理解できる命令列に直す
4.計算
5.表示
仕事を分けた後はこれらをもとにclassを作ります
/***ここまでが多分一般的なコードを書く準備でここからが本題***/
正直よくわからないので適当に書きます
Stringの命令列が入ると計算を行うStackマシンを書きます
(stack自体はjavaで用意されているものを使用するのでとても簡単)
//命令列を受け取り数値をstackにpush,他なら各種操作 //stackの定義 Deque<Double> stack = new ArrayDeque<Double>(); if(order.equals("push")){ //数値をpush }else{ if(order.equals("add")){ //加算 }else if(order.equals("sub")){ //減算 }else if(order.equals("mul")){ //乗算 }else if(order.equals("div")){ //除算 }else if(order.equals("wrt")){ //結果の表示 }else if(order.equals("halt")){ //終了命令 } }
ここで各計算の実行時にstackから数値を2つpopして行いますが、後に入れたものからpopされるのでどちらが先かに注意してください
とりあえずこれで計算と表示部分(仕事4,5)はこれで完成
ね、簡単でしょ?
※例外処理(0で割るなど)とかは頑張って
word
中置記法:「1+2」のような一般的な書き方
後置記法:「1 2 +」のような数値→演算子のような書き方
stack: データ構造の一つでデータを後に入れたものを先に取り出すような形(円筒を考えて上からものを入れていき上から取り出すようなイメージ)