Почему этот код печатает неправильные простые числа? - PullRequest
0 голосов
/ 21 октября 2019

"Я думаю, что проблема в цикле. Потому что я использовал один и тот же" j "для итерации в цикле обеих функций."Я хотел напечатать все простые числа от 1 до 100. Я думаю, что весь код хорош. Но он продолжал показывать вывод, отличный от простых чисел.

Я не могу найти ответы сам. И никакие другие места не написали ответ. Пожалуйста, помогите мне здесь. Я хочу понять эту проблему.

var n = 100;

var prime1 = new Array();


//producing prime number upto 97
function primeNumber() {
  for (j = 1; j <= n; j++) {
    if (countRemainder(j) == 2) {
      prime1.push(j);

    }
  }
}
primeNumber();

console.log(prime1);


function countRemainder(n) {
  var count = 0;
  for (j = 1; j <= n; j++) {
    if (n % j == 0) {
      count++;
    }

  }
  return count;

}

screenshot array output

Ответы [ 3 ]

1 голос
/ 21 октября 2019

Проблема действительно возникала, потому что вы использовали одну и ту же переменную в обоих for циклах.

Когда вы объявляете переменную, такую ​​как j = 0;, а не var j = 0;, переменная будет добавлена ​​в глобальную область (вместо области, в которой вы находитесь, поэтому любая другая область может видеть и изменять эту переменную).

Если ваш сценарий работает в строгом режиме , то это приведет к ошибке вместо добавления переменной в глобальную область.

Так что просто добавьте varперед каждым j объявлением.

var n = 100;

var prime1 = new Array();


//producing prime number upto 97
function primeNumber() {
  for (var j = 1; j <= n; j++) {
    if (countRemainder(j) == 2) {
      prime1.push(j);
    }
  }
}

primeNumber();

console.log(prime1);

function countRemainder(n) {
  var count = 0;
  for (var j = 1; j <= n; j++) {
    if (n % j == 0) {
      count++;
    }
  }
  return count;
}
0 голосов
/ 21 октября 2019

Попробуйте это

var n = 100;

var prime1 = new Array();


//producing prime number upto 97
function primeNumber() {
  for (var j = 1; j <= n; j++) {
    if (countRemainder(j) == 2) {
      prime1.push(j);

    }
  }
}
primeNumber();

console.log(prime1);


function countRemainder(n) {
  var count = 0;
  for (var j = 1; j <= n; j++) {
    if (n % j == 0) {
      count++;
    }

  }
  return count;

}
0 голосов
/ 21 октября 2019

Используйте "let", чтобы правильно объявить "j".

function primeNumber() {
  for (let j = 1; j <= n; j++) {
    if (countRemainder(j) == 2) {
      prime1.push(j);

    }
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...