Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/364.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_Primes - Fatal编程技术网

尝试使用javascript查找素数和时出现错误

尝试使用javascript查找素数和时出现错误,javascript,arrays,for-loop,primes,Javascript,Arrays,For Loop,Primes,我试图得到素数数组的和,我知道有更优雅的方法可以做到这一点,并且已经看到了这些解决方案的链接 我的问题是在这个特定的脚本中出现了一些错误,我试图理解是什么导致了这个代码失败 问题是数字9、15和许多其他数字正在被添加到素数数组中,尽管它们都正确地通过了检查它们是否为素数的测试。尽管测试失败,但我无法理解脚本中的内容会导致数字推送到数组中。再说一次,我并不是在寻找一种完全不同/更好的方法来求素数的和,但是如果能帮我找出这个脚本中的错误,我将不胜感激 函数totalPrime(num){ var

我试图得到素数数组的和,我知道有更优雅的方法可以做到这一点,并且已经看到了这些解决方案的链接

我的问题是在这个特定的脚本中出现了一些错误,我试图理解是什么导致了这个代码失败

问题是数字9、15和许多其他数字正在被添加到素数数组中,尽管它们都正确地通过了检查它们是否为素数的测试。尽管测试失败,但我无法理解脚本中的内容会导致数字推送到数组中。再说一次,我并不是在寻找一种完全不同/更好的方法来求素数的和,但是如果能帮我找出这个脚本中的错误,我将不胜感激

函数totalPrime(num){
var nums=[];
var素数=[];
对于(var i=1;
(num-i)>1;i++){
nums.push(num-i);
}
弗雷奇数(iPrime);
函数isPrime(n){
var a=[];
var检验;
如果(n==1){}如果(n==2){
素数推(n);
}否则{
对于(var i=1;
(n-i)>1;i++){
a、 推(n-i);
}
a、 forEach(函数(x){
如果((n%x)==0){
测试=假;
}否则{
测试=真;
}
});
如果(测试){
素数推(n);
}else{}
};
}
console.log(primes.reduce(函数a,b){
返回a+b
}));
}

totalPrime(5)每次测试中的
测试值将覆盖上一次检查。因此,实际上只有最后一次检查(除以2)才相关,所有奇数素数都失败

您可以通过将默认的
test
更改为
true
,并删除代码
test=true中的现有行来更正它

更正后的代码:

function isPrime(n) {
  var a = [];
  var test = true;
  if (n === 1) {} else if (n === 2) {
    primes.push(n);
  } else {
    for (var i = 1;
      (n - i) > 1; i++) {
      a.push(n - i);
    }
    a.forEach(function(x) {
      if ((n % x) === 0) {
        test = false;
      } 
    });
    if (test) {
      primes.push(n);
    }
  };
}

a.forEach(函数(x)内设置
test
变量{
确保调用后的最终值将是上次迭代时设置的值。我认为您要做的是在
.forEach
之前初始化
test=true
,然后在回调中仅将其设置为
false
。再加上@CrazyTrain所说的,您将其设置为false,即9%3但在9%2的情况下,将测试设置为true。在我看来,最好使用for循环,并在发现错误时立即中断循环。这不仅可以完成工作,而且当你通过较大的数字时,当你在迭代2中意识到它是错误的时候,它将阻止你通过所有迭代。这是difF如果您对变量使用像
n
x
a
这样的神奇名称,则无法读取代码。另外,请阅读以获得检查数字是否为素数的有效方法。我建议在任何浏览器中使用DEBUG来查看代码的错误。