您当前的位置: 首页 >  Java

星拱北辰

暂无认证

  • 0浏览

    0关注

    1205博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

【Java】基于栈的算术表达式求值

星拱北辰 发布时间:2019-10-08 23:33:14 ,浏览量:0

定义异常类
public class ExpressionException extends RuntimeException {

    private static final long serialVersionUID = 1L;
    
    public ExpressionException() {}
    
    public ExpressionException(String message) {
        super(message);
    }

}
利用栈的知识进行编程实现
public class Expression {
    
    private String expr;
    
    //初始化表达式
    public Expression(String expr) {
        this.expr = expr;
    }
    
    public int compute() {
        //定义运算数栈
        char[] OPND = new char[10];
        //定义运算符栈
        char[] OPTR = new char[10];
        //OPTR初始化为定界符
        OPTR[0] = '#';
        //两栈栈顶初始化
        int top1 = -1, top2 = 0;
        char[] chars = expr.toCharArray();
        //依次读取表达式字符
        for (int i = 0; i = 48 && chars[i] oper1高
        //0->相同
        //-1->oper1低
        switch (oper1) {
            case '+':
            case '-':
                if (oper2 == '(' || oper2 == '#') {
                    return 1;
                } else {
                    return -1;
                }
            case '*':
            case '/':
                if (oper2 == '*' || oper2 == '/') {
                    return -1;
                } else {
                    return 1;
                }
            case '(':
                return 1;
            case ')':
                if (oper2 == '(') {
                    return 0;
                } else {
                    return -1;
                }
            case '#':
                if (oper2 == '#') {
                    return 0;
                } else {
                    return -1;
                }
            default:
                throw new ExpressionException("符号无法识别");
        }
    }

}

测试类:

public class ExpressionTester {

    public static void main(String[] args) {
        Expression expression = new Expression("(4+2)*3-5#");
        int result = expression.compute();
        System.out.println("运算结果为:" + result);
    }

}

测试结果:

运算结果为:13

这样,一个简单的算术表达式求值的问题就解决了。

流程分解

在这里插入图片描述

说明(Update@2020.2.20)

这里只能支持十以内的算术,大家想必也能发现了,毕竟是用char做的……见谅……

关注
打赏
1660750074
查看更多评论
立即登录/注册

微信扫码登录

0.0444s