为什么我的“while”代码不起作用,而 for one 可以?

why my 'while' code doesn't work, but the for one does?

提问人:Diego Machin 提问时间:11/1/2023 更新时间:11/1/2023 访问量:58

问:

我正在学习javascript..我的“while”循环输出毫无意义的东西,但“for”循环可以工作(它给出了一个以 10 为限制的质数),我检查了语法和“;”,还剩下什么?

这是“用于”的工作:

            let n = 10;
            nextPrime:
            for (let i = 2; i <= n; i++) { // for each i...
              for (let j = 2; j < i; j++) { // look for a divisor..
                if (i % j == 0 ) continue nextPrime; // not a prime, go next i
              }
              alert( i ); // a prime
            }

这个效果很好。给出 2,3,5,7,它们是质数。.

这是“while”:

            let n = 10; /*limit for the loop*/
            let i = 2; /*base*/
            let j = 2; /*factor*/
            nextPrime:
            while (i <= n) {
              while (j < i) {
                if (i % j == 0) {
                  continue nextPrime;
                }
                j++;
              }
              i++;
              alert(i);
            }

这个给了我毫无意义的数字(3,4,5,6,7,8,9,10,11)。但是为什么?解决方案是什么?

javascript for-loop while-loop

评论

2赞 Pointy 11/1/2023
您忘记在版本中重置jwhile
0赞 deceze 11/1/2023
循环在 之后递增,您的循环中,您之前这样做。forialertwhile
0赞 Diego Machin 11/1/2023
以前?即便如此,它也应该输出 3,5,7 innit?
0赞 Diego Machin 11/1/2023
顺便说一句,我修改了代码,使其通过将“let j”放入 while 循环中来“重置”j 值(我不太确定这是否正确,我正在自己学习 JavaScript..) 并且输出是 2,3 和 crash..

答:

0赞 AztecCodes 11/1/2023 #1

JavaScript while 循环问题

我理解为什么你的素数生成器的实现没有产生预期的结果。主要问题在于 、 和 语句的放置位置。此外,在确定质数后,您似乎没有重置 to 的值。while-loopi++j++alert(i)j2

修订后的 while-loop 代码:

let n = 10; /*limit for loop*/
let i = 2; /*base*/

nextPrime:
while (i <= n) {
  let j = 2; /*factor*/
  while (j < i) {
    if (i % j == 0) {
      i++;
      continue nextPrime;
    }
    j++;
  }
  alert(i);
  i++;
}

评论

0赞 Diego Machin 11/1/2023
我的家伙,你是个天才!,我不知道为什么我需要在继续之前将另一个 i++ 放入 if 中。.但是你知道你的东西,但是你有没有解释为什么会发生这种情况?
0赞 Diego Machin 11/1/2023
顺便说一句,我只是遵循了“FOR”和“WHILE”的语法,同时进行了这种转换,期望不添加任何内容。编程之美..
0赞 AztecCodes 11/1/2023
@DiegoMachin 对不起,我不太明白你的问题。
0赞 Diego Machin 11/1/2023
查看您的代码..i++ 在 while 和 i++ 在 if 中,你做了两次并且它工作得很好,现在看到“for”一个。.只需 1 个 i++,它也可以工作。.问题是为什么在“while”中需要一个 i++,为什么“for”不需要它?
0赞 AztecCodes 11/1/2023
@DiegoMachin 否则,当它可以通过 the 被整除时,不会得到 +1,逻辑就会被破坏。ji