JS 中的 Postfix 算法评估
Posted
技术标签:
【中文标题】JS 中的 Postfix 算法评估【英文标题】:Postfix Algorithm Evaluation in JS 【发布时间】:2021-01-08 00:20:44 【问题描述】:这是我们开始的:'7.7+7'
函数的输入是一个字符串数组(原始输入转换为后缀):7.7,7,+
然后会被反馈到另一个函数中,以便在我的 html 页面中显示。此函数嵌套在另一个父函数中以与类对象一起调用。
this.postfixEval = function(postfixArray)
var stack = new Stack();
for( element of postfixArray)
console.log("element: " + element);
if(isNaN(element))
var x = stack.pop();
var y = stack.pop();
console.log("var x/y: " + x + " " + y + " element: " + element) ;
if (element == "+")
result = (y+x);
console.log("Expected Result: " + result)
stack.push(y + x);
else if (element == '-')
stack.push(y - x);
else if (element == '*')
stack.push(y * x);
else if (element == '/')
stack.push(y / x);
else
stack.push( parseFloat(element) );
//final check for non numbers within the stack
var returnValue = null;
while( !stack.isEmpty() )
stack.print();
var element = stack.pop();
if(isNaN(element))
continue;
else
returnValue = element;
return returnValue;
我不确定我做错了什么?输出仅为 7.7。以下是尝试调试的日志记录示例:
scripts.js:75 postFix: 7.7,7,+
scripts.js:145 undefined
scripts.js:175 element: 7.7
scripts.js:175 element: 7
scripts.js:175 element: +
scripts.js:180 var x/y: 7 7.7 element: +
scripts.js:76 result: null
提前感谢您的时间和帮助。
【问题讨论】:
更正:然后会被反馈到另一个函数中,以便在我的 html 页面中显示 edit: The Result。此函数嵌套在另一个父函数中以使用类对象调用 当我在 Node 中运行您的代码时,将“堆栈”作为数组而不是您的堆栈类型,您的代码可以正常工作。 @Pointy 完全正确! 【参考方案1】:如果我用一个简单的数组替换您的new Stack
,并进行必要的调整以适应这种变化,我会得到正确的答案...
function postfixEval( postfixArray )
var stack = [];
for( element of postfixArray)
console.log("element: " + element);
if(isNaN(element))
var x = stack.pop();
var y = stack.pop();
console.log("var x/y: " + x + " " + y + " element: " + element) ;
if (element == "+")
result = (y+x);
console.log("Expected Result: " + result)
stack.push(y + x);
else if (element == '-')
stack.push(y - x);
else if (element == '*')
stack.push(y * x);
else if (element == '/')
stack.push(y / x);
else
stack.push( parseFloat(element) );
//final check for non numbers within the stack
var returnValue = null;
while( stack.length > 0 )
console.log( stack );
var element = stack.pop();
if(isNaN(element))
continue;
else
returnValue = element;
return returnValue;
postfixEval(['7.7','7','+']);
【讨论】:
非常感谢您的帮助!我在***.com/users/6739159/kpjvideo 的大力帮助下发现了处理输入的方式出现的问题,因此它使该函数的输入为空,而不是函数本身。感谢您的帮助,我确实简化了我的代码,非常感谢!【参考方案2】:这是我的方法:
const value = '2 3 * 1 - 5 /';
function postfixEval( expr )
let stack = [];
const arr = expr.split('').filter((el)=>el !== " " )
console.log( arr );
for( element of arr)
console.log("element: " + element);
if(isNaN(element))
var y = stack.pop();
var x = stack.pop();
const result = eval(x+element+y)
stack.push(result)
console.log( result );
else
stack.push( parseFloat(element) );
console.log( typeof stack[0] );
return stack[0];
【讨论】:
欢迎来到 Stack Overflow!虽然此代码 sn-p 可能是解决方案,但including an explanation 确实有助于提高您的帖子质量。请记住,您是在为将来的读者回答问题,而这些人可能不知道您提出代码建议的原因。 非常感谢@holydragon 我会在有空的时候编辑它并附上解释。以上是关于JS 中的 Postfix 算法评估的主要内容,如果未能解决你的问题,请参考以下文章