目录
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);
}