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 算法评估的主要内容,如果未能解决你的问题,请参考以下文章

Postfix 无法找到 /etc/postfix/virtual 文件 [关闭]

postfix 启动报错

/var/spool/postfix

Postfix 转发到 googlemail

Postfix 将电子邮件中继到另一个域

Linux中/var/spool/postfix/maildrop占空间很大