2011-11-29 122 views
6

我必须承认,我不是一个数学专家,这就是为什么我无法解决以下问题,我满意。循环计数到100再回到0再次到100等

我有一个数字,说我= 0。我有一个函数,使每次通话时i增加1,然后再次调用自己,增加另一次和另一次...当达到100时,我希望它倒数到0,然后再次起来,有点像一个endles我像电梯一样上下跳动。这是一个优雅的解决方案吗?

我到目前为止的解决方案:

var countingUp = true; 
var i = 0; 

function count() { 
if(i < 100 && countingUp) {i+=1} 
if(i > 1 && !countingUp) {i-=1} 

if(i===100) {countingUp=false;} 
if(i===1) {countingUp=true;} 

count() 
} 
count() 

我在寻找的东西更短。

+0

如果有(我希望)是数之间的一些延迟?否则你的环境就会锁定。 – RightSaidFred

+0

是的,不要尝试这个代码,它只是为了显示这个想法。 – Hans

回答

6

看起来没给我,但可能会出售你的狗为奴,窃取你的啤酒:

var direction = 1; 
var i = 0; 

function count() { 
    i += direction; 
    direction *= (((i % 100) == 0) ? -1 : 1); 
} 
+0

看起来很紧张,我%100做什么? – Hans

+1

除以100并返回余数 – Arjan

+0

运行此代码产生“未捕获的SyntaxError:意外的标记)“一个方括号... ...方向* =((i%100 == 0)?-1:1) – Hans

3

如果是正数或负数,您可以有一个变量来增加或减少金额。所以你只需要改变可变符号。

var countingUp = 1; 
var i = 0; 

function count() { 

    i += (1 * countingUp); 

    if (i == 100 || i == 0) 
    { 
     countingUp *= -1; 
    } 
} 

fiddle here.

为了避免无限循环,只需使用一个的setInterval()。

window.setInterval(count, 1); 
+0

无限递归在那里...计数呼叫计数呼叫计数... –

+0

无限递归... while循环...对我来说同样的事情(确定,不是因为JS运行时不支持尾递归:() – hugomg

+0

@missingno只是使用setInterval,并避免在同一函数内调用相同的函数...检查我编辑的小提琴 –

1

只是为了好玩:

function createCounter(min,max) { 
    var dir = -1, val = min; 
    return function() { return val += ((val >= max || val <= min) ? dir=-dir : dir); } 
} 

,然后用它

var counter = createCounter(0,5); 
counter(); // 1 
counter(); // 2 
counter(); // 3 
counter(); // 4 
counter(); // 5 
counter(); // 4 
counter(); // 3 
counter(); // 2 
counter(); // 1 
counter(); // 0 
counter(); // 1 
counter(); // 2 
4

表达式abs((i % 200) - 100)使锯齿图案,你想要的,因为我增加。

所以后来是这样的:

var i = 100; 
while (1) { 
    var j = Math.abs((i % 200) - 100); 
    // Use j 
    // ... 
    i += 1; 
}