循环算法递增一个数字,直到它达到一个值,然后递减

时间:2015-10-24 05:02:00

标签: javascript algorithm while-loop increment decrement

我正在尝试递增一个数字,直到它达到一个值(比如说100),然后让它递减直到达到0,然后让所有这些都在while循环中运行。

代码似乎是正确的,但是浏览器是冻结的,所以如果算法存在缺陷,我无法检查控制台。

var ceiling = 100;
var floor = 1;
var x = 1;
var step = 1; 

setInterval(function(){
    while(1) {
        while(x + step <= ceiling) {
            x += step;
            document.write(x + ' ');        
        }
        while(x - step >= floor) {
            x -= step;
            document.write(x + ' ');        
        }
    }
}, 1500);

我在这里使用setInterval来减慢执行速度并避免浏览器出现缓冲问题。它应该不是问题,因为我有16GB的RAM,但它可能取决于浏览器在一个标签中如何使用/访问它。

我也尝试将setInterval函数包装在另一个函数中并执行它,结果相同。

3 个答案:

答案 0 :(得分:3)

你有一个while(1)循环,基本上是一个无限循环,即使没有执行代码,它也会冻结浏览器。

答案 1 :(得分:1)

document.write仅用于文档的第一次呈现。由于您正在进行间隔,因此已经呈现了文档,并且您无法使用document.write。相反,您需要将文本附加到正文或div

答案 2 :(得分:0)

其他答案已经指出了无限循环和使用document.write的问题。

我认为这可以满足您的需求:

var ceiling = 100;
var floor = 1;
var x = 1;
var step = 1;

setInterval(function() {
  console.log(x);
  x += step;
  if (x === ceiling || x === floor) {
    step = -step;
  }
}, 1500);

setInterval本质上是你的while(1)循环。