首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何防止我的while循环只输出一个结果?

如何防止我的while循环只输出一个结果?
EN

Stack Overflow用户
提问于 2021-02-06 18:01:50
回答 3查看 116关注 0票数 0

我使用JavaScript that循环打印出小于40的Fibonacci系列数字。当我执行cosole.log()时,我得到了所需的数字,但由于某种原因,当试图将结果绑定到div时,它只是打印出最后一个数字(34)。有什么容易解决的办法吗?谢谢

代码语言:javascript
复制
let choice = document.getElementById('sequence').value;
let num1 = 0,
  num2 = 1,
  next;
let fibonacciSequenceText;

if (choice == "fibonacci") {

  while (num1 < 40) {
    fibonacciSequenceText = num1 + ", ";
    next = num1 + num2;
    num1 = num2;
    num2 = next;
    console.log(fibonacciSequenceText);

  }

  document.getElementById('results').innerHTML = fibonacciSequenceText;

}
代码语言:javascript
复制
<select id="sequence" class="drop-down-menu">
  <option value="select;">Select--</option>
  <option value="fibonacci">Fibonacci Sequence</option>
  <option value="even">Even Numbers</option>
  <option value="odd">Odd Numbers</option>
</select>

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2021-02-06 18:07:00

您应该使用字符串连接来构建一个字符串,而不是在每次迭代中对变量进行重新排序。

代码语言:javascript
复制
fibonacciSequenceText += num1 + ", ";

还请注意使用空字符串初始化fibonacciSequenceText,否则在结果中第一个条目将未定义。

代码语言:javascript
复制
let fibonacciSequenceText = "";

代码语言:javascript
复制
document.getElementById('sequence').addEventListener('change',function(){
let choice = document.getElementById('sequence').value;
let num1 = 0,
  num2 = 1,
  next;
let fibonacciSequenceText = "";

if (choice == "fibonacci") {
  while (num1 < 40) {
    fibonacciSequenceText += num1 + ", ";
    next = num1 + num2;
    num1 = num2;
    num2 = next;


  }

  document.getElementById('results').innerHTML = fibonacciSequenceText;

}
})
代码语言:javascript
复制
<select id="sequence" class="drop-down-menu">
  <option value="select;">Select--</option>
  <option value="fibonacci">Fibonacci Sequence</option>
  <option value="even">Even Numbers</option>
  <option value="odd">Odd Numbers</option>
</select>

<div id="results"></div>

票数 0
EN

Stack Overflow用户

发布于 2021-02-06 18:07:25

在每次迭代中都要覆盖变量。请按以下方式声明变量:

代码语言:javascript
复制
let fibonacciSequenceText = "";

然后在while循环中尝试以下操作:

代码语言:javascript
复制
fibonacciSequenceText += num1 + ", ";

这样,您将在每次迭代中将相应的数字添加到变量中,而不是覆盖它。

票数 1
EN

Stack Overflow用户

发布于 2021-02-06 18:09:24

使用数组代替和join()。例如:

代码语言:javascript
复制
let choice = document.getElementById('sequence');
let num1 = 0,
  num2 = 1,
  next;
let fibonacciSequenceText = [];

choice.addEventListener('change',(e) => {
if (e.target.value == "fibonacci") {

  while (num1 < 40) {
    fibonacciSequenceText.push(num1);
    next = num1 + num2;
    num1 = num2;
    num2 = next;
    console.log(fibonacciSequenceText);

  }

  document.getElementById('results').innerHTML = fibonacciSequenceText.join(',');

}
});
代码语言:javascript
复制
<select id="sequence" class="drop-down-menu">
  <option value="select;">Select--</option>
  <option value="fibonacci">Fibonacci Sequence</option>
  <option value="even">Even Numbers</option>
  <option value="odd">Odd Numbers</option>
</select>
<div id="results"></div>

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66080172

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档