前缀符号字符串计算器Javascript问题

问题描述

我正在为前缀符号字符串制作一个计算器,它涵盖了我添加到其中的所有常规测试。但是我遇到了一个似乎没有得到正确答案的问题,我不确定为什么它似乎有问题。

我认为这可能与数字的除法和减法有关,因为问题之一是我需要假设所有输入都是有效的,因此不会有负数,也不会有负数错误输入 IE 格式不正确。

这是我输入的代码和一些测试问题。

"+ / * 1 3 + 12 16 * 10 4" = 40.107142857142854
"+ * / - 5 3 / 1 3 + 2 2 / 3 * + 12 16 * 10 4" = 24.00267857142857 --- This is the one it doesn't like
"/ 300000 * + 12 16 * 10 40"= 26.785714285714285
function prefixEval(expression) {
    let temp = expression.split(' ')
    let expr = temp.reverse()
    let stack = []

    for (let i = 0; i < expr.length; i++) {
        if (
            expr[i] === '+' ||
            expr[i] === '-' ||
            expr[i] === '/' ||
            expr[i] === '*'
        ) {
            let j = stack.pop()
            let k = stack.pop()
            let temp = checkOperator(parseInt(j),parseInt(k),expr[i])

            stack.push(temp)
        } else {
            stack.push(expr[i])
        }
    }
    return stack
}

function checkOperator(a,b,op) {
    switch (op) {
        case '+':
            console.log('adding' + ' ' + a + ' ' + op + ' ' + b)
            console.log(a + b)
            return a + b
        case '-':
            console.log('subtracting' + ' ' + a + ' ' + op + ' ' + b)
            console.log(a - b)
            return a - b
        case '/':
            console.log('dividing' + ' ' + a + ' ' + op + ' ' + b)
            console.log(a / b)
            return a / b
        case '*':
            console.log('multiplying' + ' ' + a + ' ' + op + ' ' + b)
            console.log(a * b)
            return a * b
        default:
            return 'this is not correct'
    }
}

console.log(prefixEval('+ * / - 5 3 / 1 3 + 2 2 / 3 * + 12 16 * 10 4'))

解决方法

您正在使用 parseInt 并将 2 除以 0 产生 Infinity 。要修复,

改变,

let temp = checkOperator(parseInt(j),parseInt(k),expr[i])

let temp = checkOperator(parseFloat(j),parseFloat(k),expr[i])

这是给你预期的答案

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...