【Java项目实践】四则运算项目实现

四则运算项目实现

项目介绍

最开始的计算器只能进行两个数之间的运算,而不能进行复杂的如“9+((3*2)+(3-1))/2” 这样的四则运算。后来一名波兰的逻辑学家发明了后缀表达式(或称为逆波兰表达式),非常巧妙地解决了程序实现四则运算的难题。

后缀表达式是一种把所有运算符都放在运算数字后面出现的式子,所以被称为后缀表达式,这样就解决了运算优先级和括号的问题。而中缀表达式就是我们平常用的标准四则运算表达式,即“9+((3*2)+(3-1))/2”。在计算机计算一个标准四则运算表达式时,都是先将中缀表达式转化为后缀表达式,然后进行计算。

例如中缀表达式“9+((3*2)+(3-1))/2”转化为后缀表达式“9 3 2 * 3 1 - + 2 / +”。

项目功能

模拟计算器进行四则运算表达式求值的过程

项目实现思路

1、中缀表达式转换为后缀表达式过程

规则:

从左到有遍历中缀表达式的每个数字和符号,若是数字就输出,及称为后缀表达式的一部分;若是符号,则判断其与栈顶符号的优先级,是右括号或优先级低于栈顶符号(乘除优先加减)则栈顶元素依次出栈并输出,并将当前符号进栈,一直到最后输出后缀表达式为止。

2、后缀表达式计算结果

规则:

从左到右遍历表达式的每个数字和符号,遇到是数字就进栈,遇到符号就处于栈顶两个数字出栈,进行运算,运算结果进栈,一直到最终结果

代码实现

/**
 * 逆波兰式(四则运算)
 */
public class InversePolandStyle {
   
    private static String suffix = ""; //后缀表达式
    private static char SEPARATOR = ' '; //分隔符,用于数与数,数与符号,符号与符号之间分开,便于判断

    /**
     * 后缀表达式运算
     * @param suffix 后缀表达式
     * 思路:从左到右遍历后缀表达式的每个数字和符号,遇到是数字就进栈,遇到是符号,
     *       就将处于栈顶两个数字出栈,进行运算,运算结果入栈,一直到最终获得结果
     */
    public static void SuffixExpressionOperation(String suffix){
   
        MyOrderStack<Integer> myStack = new MyOrderStack<>(suffix.length());
        //从左到右遍历后缀表达式的每个数字和符号
        for(int suffixIndex = 0;suffixIndex < suffix.length();suffixIndex++){
   
            if(suffix.charAt(suffixIndex) == SEPARATOR){
   
                continue; //若目前下标字符是分隔符,更新suffixIndex,继续进行遍历
            }
            //若目前下标字符是数字,将其转换为Integer类型进行入栈操作
            if(Character.isDigit(suffix.charAt(suffixIndex))){
   
                Integer number = 0; //定义一个Integer类型的number临时存储转换数字
                //利用分隔符判断是否存在两位及以上数字存在
                while (suffixIndex+1 < suffix.length() && suffix.charAt(suffixIndex) != SEPARATOR){
   
                    //进行类型转换,将字符类型的数字转换为Integer类型
                    number = number * 10 + suffix.charAt(suffixIndex++)-'0';
                }
                myStack.push(number);
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值