Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 循环算法,递增一个数字直到它达到一个值,然后递减_Javascript_Algorithm_While Loop_Increment_Decrement - Fatal编程技术网

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

Javascript 循环算法,递增一个数字直到它达到一个值,然后递减,javascript,algorithm,while-loop,increment,decrement,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) {

我试图增加一个数字,直到它达到一个值(比如说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);
var上限=100;
var下限=1;
var x=1;
var阶跃=1;
setInterval(函数(){
而(1){
而(x+台阶=地板){
x-=阶跃;
文件。写入(x+“”);
}
}
}, 1500);
我在这里使用了setInterval来降低执行速度,避免浏览器出现缓冲问题。这应该不是问题,因为我有16GB的RAM,但这可能取决于浏览器如何在一个选项卡中使用/访问它


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

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

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

document.write仅用于首次呈现文档。由于您正在执行间隔,因此该文档已经呈现,并且您不能使用document.write。相反,您需要将文本附加到正文或div

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

其他答案已经指出了无休止循环和使用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)循环。

其他答案已经指出了无止境循环和使用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)循环。

你希望你的代码如何摆脱无限while循环…它应该是一个无限循环,尽管它是一个执行速度减慢的无限循环。为什么不做一个简单的测试,看看你的无限循环是否真的像你想象的那样“减慢”?你真的认为setInterval会影响函数内部的循环吗?测试你的理论。你如何期望你的代码逃脱无限while循环…它应该是一个无限循环,尽管是一个执行速度减慢的无限循环。为什么不做一个简单的测试,看看你的无限循环是否真的像你认为的那样“减慢”?你真的认为setInterval会影响函数内部的循环吗?测试你的理论。你可能是对的,因为如果我使用console.log输出数字(x),它在控制台中工作。我将尝试将其附加为文本节点或类似内容。@kuantik您可以尝试document.body.innerHTML+=(x+“
”)您可能是对的,因为如果我使用console.log输出数字(x),它在控制台中工作。我将尝试将其附加为文本节点或类似的内容。@kuantik您可以尝试document.body.innerHTML+=(x+“
”)如果使用设置正确的setInterval,则不应冻结浏览器。谁说无限循环在算法中是不可用的?顺便说一句,如果我将document.write替换为console.log,那么这段代码在控制台中工作。因此,运行无限循环并没有什么本质上不起作用的,只要你把它的速度降到足够慢,浏览器缓冲区就能赶上执行速度。你们需要停止“无限循环”的事情。这个微小的功能几乎不需要任何内存。因此,运行的“并发”函数将稳步增长。也许他想画一张图表,说明他可以同时运行多少个设置间隔函数。也许他在试图理解同时运行的多个setinterval函数的行为。我实际上是在尝试模拟一个粒子的行为,它不断增长到某个点,然后开始下降(在画布中),所有这些都是在一个连续的循环中。我相信这是可能的。谢谢大家的帮助。@awoke知道永远不会同时运行多个函数。如果新函数仍在运行,则事件循环无法启动新函数。这一切都是一样的。@Shashank嗯,没错。无论如何,没有理由使用外部while。如果使用设置正确的setInterval,它不应该冻结浏览器。谁说无限循环在算法中是不可用的?顺便说一句,如果我将document.write替换为console.log,那么这段代码在控制台中工作。因此,运行无限循环并没有什么本质上不起作用的,只要你把它的速度降到足够慢,浏览器缓冲区就能赶上执行速度。你们需要停止“无限循环”的事情。这个微小的功能几乎不需要任何内存。因此,运行的“并发”函数将稳步增长。也许他想画一张图表,说明他可以同时运行多少个设置间隔函数。也许他在试图理解同时运行的多个setinterval函数的行为。我实际上是在尝试模拟一个粒子的行为,它不断增长到某个点,然后开始下降(在画布中),所有这些都是在一个连续的循环中。我相信这是可能的。谢谢大家的帮助。@awoke知道永远不会同时运行多个函数。如果新函数仍在运行,则事件循环无法启动新函数。这一切都是一样的。@Shashank嗯,没错。无论如何,没有理由使用外部while。我已经通过在循环末尾添加
return
使其工作,但是我会接受这个答案,因为它使用的代码更少。我已经通过在循环末尾添加
return
使其工作,但是我会接受这个答案,因为它使用的代码更少。