admin 管理员组

文章数量: 887007

(算法)java完成解析数学算式(计算器)二 —— 用数组解析

一、程序要求

解析一般数学算式,实现简单的带括号的加减乘除运算。

二、基本思路

上一篇我以正常思考计算式子的角度考虑,介绍了直接递归遍历字符串解析数学四则运算式子,思路很好理解,但程序写出来较为难读。这里再用另一种方法,采用java的ArrayList集合(数组)来实现目的。

这次我从易到难考虑:

  • 1)、单个数:如3,运算结果即这个数
  • 2)、加入加减后运算:如1+6-4,从左往右依次加减,式子将变为1)
  • 3)、加入乘除后运算:如1+2*3-4,从左往右依次先做乘除,式子将会变为2)
  • 4)、加入括号后运算:如1*(1+2*3-4)+5,单独拿出括号中的内容,即3),将计算结果替换括号1*3+5,又变成3)的情况

因此,对于一个数字式子,我们应该考虑化繁为简、由难变易。往往加入括号后,让我们解析起来增加了困难,所以,解析无括号的四则运算是我们应该考虑的第一步。

对于一个无括号的数字式子:-1+2*-3/3+-2 :
  • 1、把数字和运算符分离,分别放入两个数组:
  • 2、遍历符号数组,先从左向右找乘除,如上b1为第一个乘除号,则删除b1、a1、a2,将a1 b1 a2的运算结果插入到a1;以此类推至无乘除号:
  • 3、同2,从左往右依次计算加减至无加减:
  • 4、此时a0即为运算结果
对于一个有括号的式子,我们只有按无括号的计算方法计算出括号中

本文标签: (算法)java完成解析数学算式(计算器)二用数组解析