【问题标题】:Why my transformation of a for-loop code into a while-loop one failed?为什么我将 for 循环代码转换为 while 循环代码失败了?
【发布时间】:2021-05-29 10:55:52
【问题描述】:

在 javascript 的 while 循环中获取从 30 到 40 的所有奇数的过程中,我遇到了无法将解决此任务的 for 循环代码平等地转换为它的问题while 循环对应物。我的while循环给出了一个额外的'41'。是我的转换错误还是 while 循环与 JavaScript 中的 for 循环本质上不同?

const max = 40;
const min = 30;
for (let i = min + 1; i < max; i += 2) {
  console.log(i);
}
// 31 33 35 37 39


const max = 40;
const min = 30;
let i = min + 1;
while (i < max) {
  console.log(i);
  i += 2;
}
// 31 33 35 37 39 41

然而,如果我们在上面的 while 循环下面写下 'console.log('end')',它就会正常工作。这要怎么解释?是系统BUG吗?

【问题讨论】:

  • 我认为您对 while 版本输出的内容有误。请提供一个完整的程序来演示您所说的内容,并告诉我们它是用什么编程语言编写的……以便我们自己编译和运行。
  • 在你的while循环中返回的41不是因为console.log,而是在你的while循环完成后,你得到的返回值为41。尝试评论console.log while 循环并执行你的代码然后你就会明白了。
  • (值得一提的是,将上述内容简单音译成Java表明两个版本输出相同的结果。)
  • @Stephen Java 中的结果相同吗?好吧,在 JavaScript 中它们肯定是不一样的。确实是两个世界:)
  • 我用 Javascript 答案更新了我的答案。我真的认为你错了。

标签: javascript for-loop testing while-loop transform


【解决方案1】:

我尝试在 while 循环结束时记录更多输出,它返回了预期的输出,但带有额外的记录语句。

var  min = 30, max = 40;
var i = min + 1;
while(i < max){
console.log(i);
i = i + 2;
}
console.log('end');

//31 33 35 37 39 end

【讨论】:

  • Wahab,请摆脱它:“console.log('end');”在您的代码中,您将获得额外的“41”。有趣的。是系统BUG吗?
  • @MaksymDudyk,是的,我已经在您的问题 cmets 部分提到了额外的 41 部分。甚至,我对 while 循环的这种行为感到惊讶。
  • 其实这不是bug。我们也可以在 for 循环中看到这种行为。如果您尝试在 for 循环的最后一行进行赋值操作,那么该赋值的输出会被打印出来,这只会在开发工具的控制台上被注意到。如果您在这里尝试您的代码:playcode.io,您可能看不到额外的输出。
  • 谢谢。让我们等待另一位专家的评估,也许是词汇领域的专家来解决这个问题。
猜你喜欢
  • 1970-01-01
  • 2021-10-22
  • 2023-01-22
  • 1970-01-01
  • 2017-12-31
  • 2018-02-22
  • 2017-04-26
  • 2018-08-19
  • 1970-01-01
相关资源
最近更新 更多