首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Java Script + Node.js计算器问题

Java Script + Node.js计算器问题
EN

Stack Overflow用户
提问于 2018-10-07 01:13:49
回答 3查看 323关注 0票数 0

我是一个进入Web开发的“新”开发人员,我遇到了一个问题,我希望Stack Overflow上的优秀人员能够帮助我。我问过班上的几位干部和指导员,大家都被难住了。

首先,我已经决定将我的所有代码放在Gitlab代码库中,所以如果你想查看整个代码(或者如果你想添加内容,请让我知道):Link to Github Repo。我警告你们不要把整件事贴成一堵墙的文字,而是一些我特别想要的文件的剪贴。但它是可靠的小文件

我正在使用简单的JavaScript以及Node.Js,以便能够在后端构建一个可以工作的计算器,我可以将其用作将来需要处理的任何其他项目的模板。现在,我只是尝试通过控制台输入一些东西来让它正常工作。

我已经为Node和我设置的imputArray变量创建了一种方法,数组如下所示:

代码语言:javascript
复制
 [(command), (num1), (num2), (num3), ...]

我设置了一个开关函数,它根据给定的命令(加、减、除等)运行一段代码。以及将命令与数字分开,并将它们放入另一个数组中。

我需要一些帮助的部分是让代码块按照我想要的方式工作。我已经将它设置为在两个数字上运行得相当容易,但我希望它可以处理我想抛出的任意多个数字。我尝试了各种形式的for循环以及forEach循环,但我似乎无法让它工作。

代码语言:javascript
复制
 case 'divide':

    for (i = 1; i < numArray.length; i++) { // If any number besides the first is 0 spit out this
        if (numArray[i] === 0) {
            consol.log("You canot divide by zero!");
        }
        else {
            var previousTotal = numArray[0]; //Inital number in array       

            for (i = 1; i < numArray.length; i++) {
                previousTotal = previousTotal / numArray[i]; // for each number in array divide to the previous number
            }
        }

        result = previousTotal // Pushes end total to result
    }

    break;

我已经经历了上述代码的几个不同版本(例如使用for循环),但这几乎就是我最终得到的结果。我确信有一种更简单、更理智的方法来做我想做的事情,但如果我知道我是如何做到的,我就不会在这里。

从本质上说,这是我想做的最理想的事情,但我找不到一种方法:我想运行一小块代码,数字数组的索引,减1。在这种情况下,它将数组中的前一个数字除以下一个数字。

因此,它只在数组中有多个数时才运行,并且它对前一个数字执行函数,或从数组中的最后一个数字开始总计。

这几乎是阻碍我完成这篇文章的唯一原因,所以如果有人能花时间查看我的垃圾代码,并帮助它做我想让它做的事情,那就太棒了。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2018-10-07 01:25:51

您的代码在每次外部循环迭代时重置结果,因此它将等于上一个prev Total的值。基本上,除了最后一个循环之外,每个循环都是不相关的。是否要将它们添加到结果中?如果是这样,您需要:

代码语言:javascript
复制
result += previousTotal

或者,如果你想要一组你想要的答案:

代码语言:javascript
复制
result.push(reviousTotal)

对不起,不是你想要的100%。希望这能有所帮助!

票数 0
EN

Stack Overflow用户

发布于 2018-10-07 01:32:19

我假设您想让divide命令执行((num1/num2)/num3)/...

在你发布的代码中有几个问题,我会发布一个版本来做上面的事情。你可以检查并比较你的版本,找出你的错误。

代码语言:javascript
复制
  // divide, 10, 2, 5
 case 'divide':
    if (numArray.length < 2) {
        console.log("no numbers in array")
        break;
    }
    // previousTotal starts with 10
    var previousTotal = numArray[1]; 

    // start from the second number which is 2
    for (i = 2; i < numArray.length; i++) {
        if (numArray[i] === 0) {
            console.log("You canot divide by zero!");
        }
        else {
            previousTotal = previousTotal / numArray[i]; // for each number in array divide to the previous number
        }
    }
    result = previousTotal;
    // result will be (10/2)/5 = 1
    break;
票数 0
EN

Stack Overflow用户

发布于 2018-10-07 01:58:17

您只需要一个循环,如果出现0,您可能希望停止迭代:

代码语言:javascript
复制
 result = numArray[0]; //no need for another variable

 for (var i = 1; i < numArray.length; i++) { // declare variables!
   if (numArray[i] === 0) {
     console.log("You canot divide by zero!"); // typo...
     break; // exit early
   }       
   result = result / numArray[i];            
 }

当然,这也可以写得更优雅一些:

代码语言:javascript
复制
 const result = numArray.reduce((a, b) => a / b);
 if(isNaN(result)) {
   console.log("Can't divide by zero!");
 } else {
   console.log(`Result is ${result}`);
 }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52681478

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档