dolanator
dolanator

Reputation: 300

Looped algorithm to increment a number until it reaches a value, then decrement

I'm trying to increment a number until it reaches a value (say 100), then make it decrement until it reaches 0, and have all this run in a while loop.

The code seems correct, but the browser is freezing, so I can't check in the console if there's a flaw in the algorithm.

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);

I've used setInterval here to slow down execution and avoid some buffering issue with the browser. It shouldn't be a problem since I have 16GB of RAM, but it might depend on how the browser can use/access that too in one tab.

I've also tried wrapping the setInterval function inside another function and execute it, with the same result.

Upvotes: 0

Views: 2304

Answers (3)

Christian Pekeler
Christian Pekeler

Reputation: 1070

The other answers have already pointed out the problems with your endless loop and with using document.write.

I think this does what you want:

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 is essentially your while(1) loop.

Upvotes: 1

AwokeKnowing
AwokeKnowing

Reputation: 8246

document.write is only intended to be used on the first rendering of the document. since you are doing an interval, then the doc is already rendered, and you can't use document.write. instead, you need to append your text to the body or a div

Upvotes: 1

Olavi Sau
Olavi Sau

Reputation: 1649

You have a while(1) loop which basically is a infinite loop, even if no code is executed, it will freeze the browser.

Upvotes: 3

Related Questions