Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/375.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ssl/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 为什么我的循环变成了无限循环?_Javascript_Arrays_For Loop_Infinite Loop_Prime Factoring - Fatal编程技术网

Javascript 为什么我的循环变成了无限循环?

Javascript 为什么我的循环变成了无限循环?,javascript,arrays,for-loop,infinite-loop,prime-factoring,Javascript,Arrays,For Loop,Infinite Loop,Prime Factoring,我正在写一个函数,它将找到一个数的素数因子。 在这个函数中,它有两个循环。一个用于查找因子,另一个用于从第一个循环中查找素因子。第二个循环已经无限了,我没有发现循环中的任何地方可以使它无限。我错过了什么 function findPrimeFactors(num) { var factors = []; var primeFactors = []; var currIndex = 0; var initFactorsLen; var currCompose; for (i = 1;

我正在写一个函数,它将找到一个数的素数因子。 在这个函数中,它有两个循环。一个用于查找因子,另一个用于从第一个循环中查找素因子。第二个循环已经无限了,我没有发现循环中的任何地方可以使它无限。我错过了什么

function findPrimeFactors(num)
{
 var factors = [];
 var primeFactors = [];
 var currIndex = 0;
 var initFactorsLen;
 var currCompose;
 for (i = 1; i <= num; ++i)
 {
  if (num % i == 0)
  {
   factors.push(i);
  }
 }
 var initFactorsLen = factors.length;
 for (i = 0; i <= initFactorsLen; ++i) 
 {
 //This is infinite loop
  console.log("i is " + i + " and factors are " + factors);
  currCompose = factors[i];
  var primeTest = isPrime(currCompose); 
  if (primeTest == true)
  {
   primeFactors.push(currCompose);
  }
 }
 return primeFactors;
}

function isPrime(num)
{
 var sqrtNum = Math.sqrt(num);
 var ceiledNum = Math.ceil(sqrtNum);
 if (num == 1 || num == 0)
 {
  return false;
 }
 else if (num == 2)
 {
  return true;
 }
 else
 {
  for (i = 2; i <= ceiledNum; ++i)
  {
   if (num % i == 0 && i != num)
   {
    return false;
   }
  }
  return true;
 }
}
函数findPrimeFactors(num)
{
var因子=[];
风险价值因子=[];
风险价值指数=0;
var initFactorsLen;
变异系数;

对于(i=1;i您的
i
循环变量是全局变量,因此这两个函数对
i
共享相同的值

使用
var
初始化并声明它,如下所示:

for (var i = 0; i <= initFactorsLen; ++i)
var factors = [],
    primeFactors = [],
    currIndex = 0,
    initFactorsLen,
    currCompose,
    i;
还请注意,您不需要显式检查真实性。这:

var primeTest = isPrime(currCompose); 
if (primeTest == true) {
  primeFactors.push(currCompose);
}
…相当于:

var primeTest = isPrime(currCompose); 
if (primeTest) {
  primeFactors.push(currCompose);
}
……或者更简单地说:

if (isPrime(currCompose)) {
  primeFactors.push(currCompose);
}

您的
i
循环变量是全局变量,因此这两个函数共享
i
的相同值

使用
var
初始化并声明它,如下所示:

for (var i = 0; i <= initFactorsLen; ++i)
var factors = [],
    primeFactors = [],
    currIndex = 0,
    initFactorsLen,
    currCompose,
    i;
还请注意,您不需要显式检查真实性。这:

var primeTest = isPrime(currCompose); 
if (primeTest == true) {
  primeFactors.push(currCompose);
}
…相当于:

var primeTest = isPrime(currCompose); 
if (primeTest) {
  primeFactors.push(currCompose);
}
……或者更简单地说:

if (isPrime(currCompose)) {
  primeFactors.push(currCompose);
}

我不熟悉javascript…您确定两个函数中的循环没有共享您的“I”。如果在函数“isprime”中使用“k”作为索引,会发生什么情况


没关系,它是10分钟前解决的

我不熟悉javascript…你确定你的两个函数中的循环没有共享你的“I”。如果你在函数“isprime”中使用“k”作为索引,会发生什么


不要紧,它是在10分钟前解决的,因为您正在使用,
isPrime
会修改您的循环计数器。因为您正在使用,
isPrime
会修改您的循环计数器。(!primeTest)是否意味着`isPrime(currcomose)`返回false?给定
var primeTest=isPrime(currcomose);
,如果
isPrime>(柯尔文)
为false,那么
primeTest
将为false,并且
!primeTest
将为true。那么,!primeTest将返回与实际值相反的值?
否定表达式。那么
!true
为false,并且
!false
为true。谢谢,我已经搜索了一周。但是没有地方可以告诉我:ddos(!primeTest)表示'isPrime(currCompose)`返回false?给定
var primeTest=isPrime(currCompose);
,如果
isPrime(currCompose)
为false,那么
primeTest
将为false,并且
!primeTest
将为true。那么,!primeTest将返回与实际值相反的值?
否定表达式。那么
!true
为false,并且
!false
为true。谢谢,我已经搜索了一周。但是没有任何地方可以告诉我:使用不同的表达式ent全局索引变量可以解决这个问题,但最好只使用局部变量来帮助防止这样的副作用。使用不同的全局索引变量可以解决这个问题,但最好只使用局部变量来帮助防止这样的副作用。