以下代码仅生成输出true。怎么调试呢?

时间:2016-06-22 12:09:45

标签: javascript function

我有以下代码来生成素数。但是,它不是生成素数,而是生成从2到数字的整个列表,该数字被输入到函数中。怎么解决这个?



var i = 2;
var primeCheck = function(number){
    while(i<number){
        if(number%i===0)
        {
           break;
        }
    i++;
    }
if (i===number)
{
  return true;
}
};

var primeGen = function(limit){
    for(k=2; k<=limit; k++)
    {
        if(primeCheck(k)){
            console.log(k);
        }
    }
};
primeGen(10);
&#13;
&#13;
&#13;

编辑:我意识到我对自己的问题不太清楚。所以我更新了它。我的猜测是&#34;返回true&#34;造成这种滋扰。因此我基于此问了我之前的问题。

3 个答案:

答案 0 :(得分:1)

在您想要提醒的条件下使用primeCheck(11) 你的逻辑中有一些错误,当我尝试使用primeCheck(12)时,它没有给出预期的结果。

&#13;
&#13;
var i = 2;
var primeCheck = function(number){
    while(i<Math.floor(Math.sqrt(number))){
        if(number%i===0)
        {
           alert("Not a prime");
           break;
        }
    i++;
    }
   if (i===Math.floor(Math.sqrt(number)))
   {
     return true;
   }
};

//now check for prime or not prime
if(primeCheck(11))
{
    alert("prime");
}

if(!primeCheck(12))
{
    alert("not prime");
}
&#13;
&#13;
&#13;

答案 1 :(得分:1)

返回警报的if条件与不带参数的primecheck()一起运行。纠正它:

if(primeCheck(11)){

警报( “素”);

}

此外,通过调用primeCheck(11)删除最后一行。

答案 2 :(得分:1)

如果您想要返回return而不是alert; break。我会考虑重构这个。首先,你永远不应该有一个函数来执行这样一个简单的任务依赖外部变量。保持模块化。

function isPrime(num) {
  for (var i = 2; i < num; i++) {
    if (num % i === 0) {
      return false;
    }
  }

  return num > 1
}

如果数字是素数,则返回true,否则返回false。这很有用,因为您现在可以灵活地使用它做多件事。如果你想返回true或false,它会这样做。如果你想输出其他东西,比如&#34; prime&#34;或者&#34;不是素数&#34;它很容易进一步包装。

function isPrimeText(num) {
  return isPrime(num) ? "Prime" : "Not Prime"
}