β

JAVA学习笔记-计算器编写(一)

Monk-Studio 218 阅读
keywords
简介:

这篇文章介绍的是初级JAVA计算器的实现,包括 加、减、乘、除 以及括号运算的实现。负数运算、小数运算以及其他函数运算等等高级功能见未来更新 :)

代码实现总体流程如下:

  1. 取得输入的字符串的逆波兰式
  2. 逆波兰式计算

正文

1. 取逆波兰式

逆波兰式的定义这里就不必再多说了,之所以要取逆波兰式来运算,是因为相比我们平常人类所习惯的表达式来说,逆波兰式的规则更适合计算机来识别~。所以首先,需要把我们所习惯的式子换成计算机习惯的式子!

栗子:

表达式:

(1+5*3)/2

逆波兰式:

1 5 3 * + 2 /

取逆波兰式的算法:(原因这里就不多讲啦,大家推几个式子就能明白了)

  1. 首先,创建一个堆栈S1,用于储存操作符;创建一个string叫rpn吧,用来储存最后的逆波兰式结果。开始遍历输入字符串
  2. 如果取出数字(切记要取出完整的操作数),直接放入rpn
  3. 如果取出操作符,分情况:
    • 如果操作符优先级大于栈顶元素优先级的话,则直接压入栈S1
    • 如果优先级小于或等于栈顶元素的话,S1开始弹栈入rpn,直到大于栈顶元素优先级,压入栈S1。
  4. “(”的话,直接压入栈S1。
  5. “)”的话,开始弹出S1中的操作符依次进入rpn中,直到遇到“(”,停止弹栈。
  6. 当所有元素都遍历结束后,将S1栈中剩余的操作符全部弹入rpn中。

至此,逆波兰式就得到了

2. 计算逆波兰式

计算逆波兰式的思想就很简单了,我们首先要明确一点,那就是每次计算(一个操作符),只能有两个运算数!所以这里我们创建一个堆栈S2,用来临时存储操作数。

  1. 开始读取逆波兰式
  2. 若读到的是数字,则把整个操作数压入堆栈S2
  3. 若读到的是运算符,从S2(栈顶处)中弹出两个操作数来执行此操作

以此反复,直到处理完逆波兰式,最后的结果也就得到了。

作者:Monk-Studio
Dev端在修行途中 创建的技术博客
原文地址:JAVA学习笔记-计算器编写(一), 感谢原作者分享。

发表评论