【问题标题】:Why is it just pass? i want to know more i need explained为什么只是通过?我想知道更多我需要解释
【发布时间】:2021-04-28 04:41:14
【问题描述】:

我写了另一个答案。但我不明白这一点。

.. 虽然,我运行 chrome 调试器,但我不能很好地理解。

result = true
// is passed

我不太明白。我提交了另一个答案,但我想知道为什么它只是通过了。 我需要更多解释,我想从这段代码中修复。

function isPrime(num) {
let result;
for(let i = 1 ; i <= num ; i++) {
  if(num[i] / num[i] === 1 && num[i] / num[i] === num[i]){
    result = true
  } else {
    result = false
  }
}
  return result
}
debugger;
let output = isPrime(2);
console.log(output); // --> true

output = isPrime(6);
console.log(output); // --> false

output = isPrime(17);
console.log(output); // --> true

【问题讨论】:

  • 这绝对不是一个判断一个数是否为素数的有效函数。 result 在 i 的每次迭代中都会被覆盖,这意味着只有最后一次迭代/测试很重要。这是不对的
  • @ControlAltDel overwritten... 为什么会被覆盖?是什么原因造成的?
  • “为什么它被过度使用了?”因为您在每次迭代中都在更改 result
  • 关于您在调试时观察到的行为,在屏幕截图中您处于循环的第一次迭代中(即 i 设置为 1)。执行在第 7 行停止,这表明 else 块正在执行。 这意味着第 5 行的赋值被跳过了,这就是为什么result 仍然包含值undefined 在调试器中的另一个步骤之后,一旦执行第 7 行中的语句,result 将然后分配值false

标签: javascript if-statement scope closures


【解决方案1】:

根据维基百科,

素数(或素数)是大于 1 的自然数,它不是两个较小自然数的乘积。例如,5 是素数,因为将其写成乘积的唯一方法是 1 × 5 或 5 × 1,涉及到 5 本身。

function isPrime (num) {
  // step 1: filter 1, negative numbers and decimal numbers
  if (num === 1 || num < 0 || num % 1 !== 0) {
    return false;
  }

  // step 2: dividing num by smaller numbers
  let divisor = num - 1;

  while (divisor > 1) {
    const remainder = num % divisor;

    // if num is divisible by dividing a smaller number, it's not a prime
    if (remainder === 0) {
      return false;
    }

    divisor -= 1;
  }

  // num is a prime
  return true;
}

let output = isPrime(2);
console.log(output); // --> true

output = isPrime(6);
console.log(output); // --> false

output = isPrime(17);
console.log(output); // --> true

output = isPrime(1);
console.log(output); // --> false

output = isPrime(-12);
console.log(output); // --> false

output = isPrime(78.25);
console.log(output); // --> false

output = isPrime(-12.5);
console.log(output); // --> false

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-06
    • 1970-01-01
    • 2010-09-16
    • 2012-05-20
    • 2023-02-26
    • 2012-02-08
    相关资源
    最近更新 更多