⼀、具体功能:
1、:输⼊,输出
输⼊:允许输⼊带有括号的完整计算式(例 8*(4-95)+5÷2*e-pi) 输出:输出Double类型的结果
输出:整个运算表达式并保存于历史记录中
2、:功能
基本的加,减,乘,除,四则运算平⽅运算
开⽅运算求余运算
平⽅运算
开⽅运算求余运算
最终界⾯如下图:
除了常规的数字按钮和运算符,还有两个常数e,pi(π),清空键AC,括号运算符(),平⽅(x^x)和开⽅(sqrt)运算符,输⼊显⽰框以及历史记录⽂本框,⽂本框的垂直滚动条 和⽔平滚动条。
⼆、主要思想:
1:中缀表达式转为后缀表达式准备:
①后缀表达式队列:postQueue,⽤于存储逆波兰表达式(其实不⽤队列排序直接输出也⾏)
②操作符栈:opStack,对⽤户输⼊的操作符进⾏处理,⽤于存储运算符
算法思想:
从左向右依次读取算术表达式的元素X,分以下情况进⾏不同的处理:
- 如果X是操作数,直接⼊队
- 如果X是运算符,再分以下情况:
- 如果栈为空,直接⼊栈。
- 如果X==”(“,直接⼊栈。
- 如果X==”)“,则将栈⾥的元素逐个出栈,并⼊队到后缀表达式队列中,直到第⼀个配对的”(”出栈。(注:“(”和“)”都不 ⼊队)
- 如果是其他操作符(+ - * /),则和栈顶元素进⾏⽐较优先级。 如果栈顶元素的优先级⼤于等于X,则出栈并把栈中弹出的元素⼊队,直到栈顶元素的优先级⼩于X或者栈为空。弹出完这些元素后,才将遇到的操作符压⼊到栈中。
(3)最后将栈中剩余的操作符全部⼊队。
⽰意图:
2、计算后缀表达式准备