javascript - JS计算器问题。错误的答案

标签 javascript html

我正在编写一个单行计算器,它具有基本功能(+ - */)。我以前这样做过,但现在我总是得到错误的答案,而且我找不到我的错误。这是我的代码:

var seq = document.getElementById('sequence').value;
var allNums = [];
var i = 0, allSigns = [];
var currentNums = "";

for (i = 0; i< seq.length; i++)
{
    if (seq[i] != "+" && seq[i] != "-" && seq[i] != "*" && seq[i] != "/")
    {
        currentNums+=seq[i];
    }
    else
    {
        allNums.push(Number(currentNums));
        currentNums="";
        allSigns.push(seq[i]);
    }
}
allNums.push(Number(currentNums));
var result = 0;
for (i = 0; i < allNums.length; i++)
{
    if (allSigns[i] == '+')
        result+=Number(allNums[i]);
    else if (allSigns[i] == "-")
        result-=Number(allNums[i]);
    else if (allSigns[i] == "*")
        result*=Number(allNums[i]);
    else if (allSigns[i] == "/")
        result/=parseInt(allNums[i]);
    else
    {
        alert("The result is: " + result);
        break;
    }
}

所有这些代码都在一个名为“calculate”的函数中。该函数由按钮触发,序列来自输入。

最佳答案

虽然这个简单的计算器有很多缺点,这些缺点可能是也可能不是问题(取决于您想用它做什么),但一个问题是您的 allSigns 数组值不是与正确的 allNums 数组值关联。

看看this example 。在控制台中,您可以看到与6关联的符号是加号,而与2关联的运算符未定义。当然,这不是我们想要的。我们想要的是将两个加到六个。

解决此问题的方法是始终从一开始就将 allNums[0] 添加到 result 中。这设置了我们的结果可以由其后的任何内容进行操作。在本例中,我们从 6 开始。

接下来我们需要做的是将 allSigns 的每个值的位置向下移动一位,将运算符与它之后的值(而不是 )对齐>之前。因此,在上面的示例中,我们将 +2 关联,因此它将 2 添加到 6。

This JSFiddle显示针对此特定情况的修复。

关于javascript - JS计算器问题。错误的答案,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16405717/

相关文章:

javascript - 如何在表格中添加下拉列表?

html - 表格 CSS 样式 |边框

javascript - 如何设置 var self = this;从函数外部?

javascript - 如何在字符串 javascript 中添加 json stringify?

javascript - 我怎样才能遍历所有 P 标签,然后将它们的 innerHTML 写入页面末尾的文档中?

html - 填充整个宽度并换行的 Flexbox 图像网格

html - Nodejs 表达 html

javascript - 使用 javascript 创建 html 内容是好是坏

javascript - fullcalendar 插件不会从数组对象添加事件

JavaScript 无法在 Chrome 上创建/识别 cookie