【问题标题】:New to programming, can't figure out why this factor calculator doesn't work编程新手,不知道为什么这个因子计算器不起作用
【发布时间】:2016-04-01 10:51:10
【问题描述】:

我正在尝试制作一个因子计算器。您输入一个数字,它会找出该数字的因数。如果你将原始数字除以它的因子,你会得到零,我试图在这里实现它,这样当它以 '0' 返回时,它会被推送到一个数组并打印该数组。

var number = prompt("Number?")
    
var array = []   
    
function modulo(a, b)
    {
    return a % b;
    }
    
 for (counter = 0; counter < number; counter++)  
    {
        var result = modulo(number, counter)
        if (result = 0)
           {
           array.push(counter) 
           }
    }
    
    for (counter = 0; counter < array.length; counter++)
    {
        alert(array[counter])
    }

出现提示时,我输入了一个数字,但没有任何反应。有人可以帮忙吗?

【问题讨论】:

  • 您的代码包含大量空白,这并不能真正提高可读性(以及缩进 - 您应该缩进嵌套在 {} 中的所有内容,因为它们是仅在其中执行的块)。这些东西将使您的代码更容易自己调试。 (在javascript中,{括号通常直接放在声明之后,所以function(){,只是因为它更容易组合东西,但我想这是偏好)

标签: javascript arrays function prompt factoring


【解决方案1】:

问题来了,你使用了=(赋值运算符)而不是==比较运算符

for (counter = 0; counter < number; counter++)
{
    var result = modulo(number, counter)
    if (result == 0) // in your code this is result = 0
    {
        array.push(counter)
    }
}

Working demo


完整代码:

var number = prompt("Number?")
var array = []
function modulo(a, b)
{
    return a % b
}
for (counter = 0; counter < number; counter++)
{
    var result = modulo(number, counter)
    if (result == 0)
    {
        array.push(counter)
    }
}

for (counter = 0; counter < array.length; counter++)
{
    alert(array[counter])
}

【讨论】:

  • 为什么不把它做成一个sn-p?否则,是的,这是正确的。
【解决方案2】:

要检查值是否相等,请使用== 而不是=

if (result == 0)

【讨论】:

  • 不需要类型检查。模返回一个数字。
  • @MichaelDibbets - 你应该阅读 JavaScript: The Good Parts。另请参阅:stackoverflow.com/questions/359494/…
  • 我已经很熟悉了,甚至比熟悉还要熟悉,但这并不意味着它必须在任何地方都被使用,尤其是当学习编码通常更重要的是要知道到底什么是类型安全检查是。
  • @MichaelDibbets - 我不确定我是否理解您的回复,但 result === 0 比 result == 0 更正确和更快,尽管在这种情况下两者都可以工作。这真的没什么大不了的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-01-21
  • 2013-11-14
  • 1970-01-01
  • 1970-01-01
  • 2022-08-23
  • 2021-03-11
  • 1970-01-01
相关资源
最近更新 更多