例如:(12*3/-2)*(3+5)/2 = -72
應用場景:在計算器中輸入一大串四則運算表示式,如何按下『=』號,得出對應的正確結果,今天就來完成該功能的實現。
首先拿到乙個表示式後,我們如果按照人的計算方式,
有括號
在有括號的情況下,先計算得出括號中的結果。
沒有括號
運算按照 先乘除,後加減進行。
沒有括號表示式的實現
1.1. 將表示式拆分分別有序放入容器中(運算子放在符號容器中,數字放在數字容器中),這個時候應該考慮容器的資料結構。這個時候使用list集合比較合適,因為要做三件事都需要進行有序操作:取運算子(從容器中移除),取對應索引處的數字(從容器中移除),計算,將計算結果放回(當前索引位置)
有括號表示式的實現
2.1. 找到最內側的括號內表示式,按照無括號的方法進行計算,將計算結果替換該括號表示式的位置,此時得到新的表示式,再繼續遞迴呼叫當前方法。
無括號的演算法
/**
*該方法完成表示式的計算(不帶括弧)
* @param oper
* 計算表示式
* @return
* 返回運算結果
*/public static string calc(string oper)else
cha.add(i,opl/opr);
i--;//運算子容器的指標回到原來的位置,防止跳過下乙個運算子}}
//遍歷運算子容器,完成加減運算,當運算子容器為空時,運算結束
while(!op.isempty())
if(o=='+')
//將運算結果放回到數字容器中
cha.add(0,chal);
}return cha.get(0).tostring();
}
得到所有參與運算的運算子方法 oper2op(oper);
/**
* 得到表示式中所有的運算子
* @param oper
* 運算表示式
* @return
* 符號的list集合
*/private static listoper2op(string oper) else}}
}return oper;
}
/**
* 完成帶括弧的算數表示式運算
* @param oper
* 表示式
* @return
* 運算結果
*/public static string calcbra(string oper)elseelse
}}
java實現四則運算
最近在考慮乙個問題 公司專案可能會使用運算模板來計算相應的值,模板freemarker velocity都是不錯的選擇。那通過模板將計算公式字串組裝出來後,就需要解析字串得到計算結果,以下是我的實現 public class arithmetic public static void main st...
java四則運算
public class arithmetic implements serializable 除法 param number1 除數 param number2 被除數 param decimal 保留幾位小數點 return public static double divide string ...
簡單四則運算
form1 如下 using system using system.collections.generic using system.componentmodel using system.data using system.drawing using system.linq using syst...