计算机软件技术实习 项目一 简单计算器的实现(关于括号问题的bug解决)1-(4)

目录

1.bug描述

2.解决方案


1.bug描述

    1.如果只有括号开“(”,没有括号“)”,如:1*(2+3  ,他是一个不合法的算式,但是经过测试,计算器输出结果是1,这显然是不正确的

    2.在解决了第一个bug后,又发现了新的bug。当括号后还有算式时,它输出null,如下:

 

2.解决方案

        1.在中缀表达式转后缀表达式后,加入以下代码,因为如果括号没有匹配,在后缀表达式里是有括号存在的,所以,如果有,则不下面的执行运算

//如果括号不匹配,即后缀表达式里还有括号,则不执行运算
      for(var i=0;i<PostfixExp.length;i++){
        if(PostfixExp[i]=='('){
          return;
        }
      }

        2.出现bug的原因已经忘了,哈哈哈哈,具体解决方案如下,在代码的注释中,已经很详细了,所以我不做过多解释

/**
       * 数字的合成
       */
      for (var i=0;i<arr.length;i++) {
        // 如果当前遇到的是数字/小数点/正负号
        if (false === isNaN(arr[i]) || arr[i] === this.data.idPoint || arr[i] === this.data.idNegative) {
          num += arr[i];
          //如果下一个是加减乘除和括号毕,把它加入到数组中
          if(arr[i+1]===this.data.idPlus||arr[i+1]===this.data.idMul||arr[i+1]===this.data.idSub||arr[i+1]===this.data.idDiv||arr[i+1]===this.data.idkhb){
            optarr.push(num);
            num="";
          }
        }
        // 否则,是运算符,括号开,括号毕
        else {
          optarr.push(arr[i]);
        }
      }
      // 在最后一个数字后没有括号的情况下,它依然不在数组当中,将它也存入数组中
      if (num !== "") {
        optarr.push(num);
      }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

段小刀

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值