提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
一、目的
输入一个字符表达式,如:4+3*5-3,计算结果二、具体思路
- 遍历字符串
- 定义两个栈,将运算符压如字符栈(charsta),数字压如数字栈(numsta)
2.1 字符直接进栈
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="4+3*5-3";//计算3*5-4+3
//定义俩个栈,一个存字符,一个存数字
ArrayStack2 charsta = new ArrayStack2(10);
ArrayStack2 numsta = new ArrayStack2(10);
int index=0;
char val;
int num1;
int num2;
int res;
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)<