Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 双倍'+';招牌弄乱了!南在JS_Javascript_Algorithm_Polish Notation_Prefix Notation - Fatal编程技术网

Javascript 双倍'+';招牌弄乱了!南在JS

Javascript 双倍'+';招牌弄乱了!南在JS,javascript,algorithm,polish-notation,prefix-notation,Javascript,Algorithm,Polish Notation,Prefix Notation,使用波兰语符号计算器,我添加了一种方法来区分我得到的字符串是数字还是没有使用isNaN函数。在将++添加到字符串之前,这一切都可以正常工作 功能切割管柱(列表){ let adjustArr=列表分割(“”) 让topper=[] for(设i=0;i

使用波兰语符号计算器,我添加了一种方法来区分我得到的字符串是数字还是没有使用isNaN函数。在将++添加到字符串之前,这一切都可以正常工作

功能切割管柱(列表){
let adjustArr=列表分割(“”)
让topper=[]
for(设i=0;ilog(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。