Javascript 双倍'+';招牌弄乱了!南在JS
使用波兰语符号计算器,我添加了一种方法来区分我得到的字符串是数字还是没有使用isNaN函数。在将++添加到字符串之前,这一切都可以正常工作Javascript 双倍'+';招牌弄乱了!南在JS,javascript,algorithm,polish-notation,prefix-notation,Javascript,Algorithm,Polish Notation,Prefix Notation,使用波兰语符号计算器,我添加了一种方法来区分我得到的字符串是数字还是没有使用isNaN函数。在将++添加到字符串之前,这一切都可以正常工作 功能切割管柱(列表){ let adjustArr=列表分割(“”) 让topper=[] for(设i=0;i
功能切割管柱(列表){
let adjustArr=列表分割(“”)
让topper=[]
for(设i=0;i log(cuttingString('*1 2 30+)
您的代码似乎实现了反向波兰表示法,因此如果在任何二进制运算符之前不提供参数,则无法期望它正常工作。因此,不能在表达式中随机移动+
。只有当堆栈上至少有两个可用数字时,才会出现二进制运算符。如果没有,对pop
的调用将返回undefined
和parseInt(undefined)
为NaN
。尽管您尚未实现乘法,但当堆栈仍然为空时,*
发生是有问题的
让函数返回结果是有意义的,因为您的控制台.log
当前只输出未定义的,因此您实际上看不到计算结果
如果确实是这样,您的想法是为反向波兰符号实现一个求值器,那么下面是我将对您的代码进行调整的内容:
功能切割管柱(列表){
//允许多个空格,也可以在开始/结束位置:
让adjustArr=list.match(/\S+/g);
让topper=[];
//用于循环的
for(让adjustArr的标记){
如果(!isNaN(令牌)){
//为什么不在这里转换成数字。。。
//并允许小数。使用一元加号
顶推(+token);
}否则如果(顶部长度<2){
//参数不足时显示错误消息
抛出“+标记的参数不足”;
}否则{
设j=topper.pop();
设k=topper.pop();
如果(令牌=='+'){
顶推(j+k);
}
}
}
//验证评估是否完成
如果(顶部长度!==1){
“投掷”评估没有产生一个值,而是“+topper.length;
}
//返回值
返回topper.pop();
}
log(剪切字符串('1230++');//33
console.log(剪切字符串('12+30+);//33
请提供问题的详细说明。您显示的代码不够-adjustArr
看起来像一个数组,但您声称传递的是一个字符串。“我们不知道这个字符串是如何转换成数组的。”弗拉兹补充道,先生!您缺少一个return-top
,该代码实际上可以作为示例使用。但我不确定我是否理解您的问题,您能否给出一个显示它的输入字符串,以及您期望的结果?如果缓冲区下溢,您将得到NaN
,因此,例如,仅字符串+
将导致NaN
,因为它尝试弹出两个数字并将它们相加,但topper
中还没有数字。我注意到您的示例中有*
,但到目前为止还没有实现*
操作符……您提供了提供所需输出的代码。你写“当我开始在操作员周围移动时”。。。但不要让我们去猜测哪种情况会出错。请提供输出NaN的代码。请注意,二进制运算符(如+
)的第一次出现不能在您有两个数字之前出现,否则二进制运算符没有足够的参数,您将得到一个NaN(因为其中一个pop
调用随后返回未定义的)。因此,在这方面,输入以*
开头是毫无意义的。注:我把你的代码变成了一个可运行的代码段。是的,我是,但这正是OP在他们的代码中所做的,所以我认为他们实现了反向,错误地将其标记为Polish而不是反向Polish。