Javaの簡単な計算機(命令変換編)
この記事は後置記法の計算式からstackマシンが理解できる命令列に直す手順と簡単にコードの紹介をします(前回記事の仕事3)
この部分も簡単で
計算式をStringで受け取ってからStringTokenizerやsplitやらで式を分割して(APIで調べるなり)
if(isNum(ch)){ //文字chが数値かどうか order += push; order += ch; }else if(ch.equals("+")){ //"*"の置き換え order += "add "; }else if(ch.equals("-")){ //"-"の置き換え order += "sub "; }else if(ch.equals("*")){ //"*"の置き換え order += "mul "; }else if(ch.equals("/")){ //"/"の置き換え order += "div "; } return order; //命令列を返す
と長いStringで命令列を作ります
isNum()は自身で定義
static boolean isNum(String s){ try{ Integer.parseInt(s); return true; }catch(NumberFormatException e){ return false; } }
本来、例外処理をこのように使うのはよくないので何かほかの書き方を思いついた方はそちらを採用するのがいいと思います
さらに, 最終的に命令列orderはString型で出てきますがこれもあまりよくないです. 命令列は本来一列ずつ"push 1","push 2","add"のように読ませるものなのでリストや配列を使って構造を制限するとなお良し
ね、簡単でしょ?_(:3 」∠)_