JavaScript Циклы с If и остальным - PullRequest
0 голосов
/ 30 апреля 2020

почему следующее не точно регистрирует, является ли число простым или нет?

function isPrime2(num) {    
for(let i = 2; i < num; i++) {
if(num % i === 0) {
return console.log(false); break;
} else{return console.log(true)}
}
}

isPrime2 (33) возвращает true, даже если это простое число.

Если i = 2, то консоль будет записывать true, так как 33/2 = 16.5 Но поскольку l oop не закончено, следующее значение i будет i = 3, поэтому консоль не должна log false и затем полностью вырваться из l oop, оставив окончательный ответ ложным?

1 Ответ

0 голосов
/ 30 апреля 2020

Здесь есть две проблемы.

Ваш лог c сломан

function isPrime2(num) {
  for (let i = 2; i < num; i++) {
    const remainder = num % i;
    console.log({
      remainder
    });
    if (remainder === 0) {
      return console.log(false);
      break;
    } else {
      return console.log(true)
    }
  }
}

isPrime2(33);

i начинается с 2.

if(num % i === 0) ложно, поэтому мы go до else

else{return console.log(true)} заставляет его регистрировать true и выходить из функции.


Ваше условие отказа срабатывает, когда тест first завершается неудачей вместо ожидания l oop до sh с условием успеха для любых тестов.


33 не является простым

Делится на 3 и 11.

function isPrime2(num) {
  for (let i = 2; i < num; i++) {
    const remainder = num % i;
    console.log({
      remainder
    });
    if (remainder === 0) {
      return console.log(false);
      break;
    }
  }
  return console.log(true)
}

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