提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
一、目的
上一次只能进行个位数的运算,这次实现多位数进行运算。输入一个字符表达式,如:40+3*50-30,计算结果
二、具体思路
- 遍历字符串
- 定义两个栈,将运算符压入字符栈(charsta),数字压入数字栈(numsta)
2.1 定义一个字符串(addval)用于拼接数字,因为每次只能得到一个字符,得到之后进行判断后一个字符是否还是数字,是的话就拼接,是运算符就直接将addval压入数字栈中
2.2 运算符如果字符栈为空,直接进栈,如果不为空,和栈顶元素比较运算优先级,小于等于字符顶元素,则取出数字栈栈顶元素和次栈顶元素进行运算,再将该字符串压入字符栈中,运算结果压入数字栈中;如果该运算符运算优先级大于字符栈顶元素,直接入栈。 - 最后,判断字符栈中是否还有元素,没有了说明运算结束了,数字栈顶元素就是运算结果;若不为空,接着运算,数字栈顶和次顶元数运算,运算符为字符栈顶元素。最后输出数字栈顶元素就是运算结果了
三、代码
package demo.sjjg.stack;
public class jsq1 {
public static void main(String[] args) {
// String value="3*5-4+3";//计算3*5-4+3
// String value = "40+30*50-30";//计算40+30*50-30
String value = "40+3*50-30";//计算40+3*50-30
//定义俩个栈,一个存字符,一个存数字
ArrayStack2 charsta = new ArrayStack2(10);
ArrayStack2 numsta = new ArrayStack2(10);
int index = 0;
char val;
int num1;
int num2;
int res;
String addval = "";
while (true) {
if (index == value.length()) {
break;
}
val = value.substring(index, index + 1).charAt(0);
if (charsta.isOper(val)) {
if (charsta.isFool()) {
charsta.push(val);
} else {