2011-08-31 41 views
-1

每当我想到使用while loop,我不明白为什么我不能只使用if statement来代替。我知道一个while循环运行'while'给定的语句是真实的,但是如果条件瞬间在块内部终止,那么我就无法想象任何事情发生。如果任何人都可以给我举例说明如何/为什么我应该使用while loop。这将非常感激。while语句有什么好用处?

+2

我不知道如何'if'语句可以接近老实替换'while'循环:? – Loktar

+1

@Loktar:转到? :) –

+0

我的不好,它似乎并不存在于JavaScript中。 –

回答

7

我会试着给你一个非常高层次的答案,因为我认为直观地理解它会更容易。

将所有算法都视为食谱。一个典型的配方可能有一个看上去像部分如下:

  • 如果花生具有壳,它从壳
  • 分离将鸡蛋打散,直到它被鞭打和气泡
  • 取5分葱,切碎他们每个人都在一半

这些类型的方向你有不同的方式做任务。

第一个实际上是一个“if”语句。如果条件(花生有壳)是真的,你可以做点什么。你从字面上做:

if (not shelled) { 
    shell the peanut! // happens once 
} 

第二个是一个while循环。你击败了鸡蛋它没有鞭打和起泡。你不断地做同样的事情(鞭)),当你这样做的时候你会看着它(一遍又一遍地)来检查它是否变得非常有活力。一旦它变得起泡和足够鞭打,你就停下来。当你停下来是因为你已经通过你的“时间”条件。需要注意的一件重要的事情是,在你开始之前,你不一定知道一个鸡蛋需要多少次“鞭打”才能使它产生鞭打。你只需要做很多次,并多次检查(用你的眼睛)。你从字面上做:

while(not whipped enough) { 
    beat egg! // happens over and over 
} 

就像在食谱,你不希望有人做了一定的动作,直到时间的尽头,所以你必须始终确保您的while循环,有理智的停止条件。大多数while循环取决于循环内部的某些变化,并在该变化足够时停止。


第三个配方示例是for循环。对于每个洋葱你有(5)你对那个洋葱做了一次。你从字面上做:

for (onions 1 to 5) { 
    Chop an onion! // done 5 times total, once per onion 
} 
+0

+1非常好的插图,显示三者之间的区别和正确用法 – momo

+0

这真的可以帮助我可视化一个while循环实际上在做什么。谢谢! – 0x499602D2

2

while是一个循环结构,而不仅仅是if

var i = 0; 

while (i < 10) { 
    //this stuff will happen until 
    //i < 10 

    // usually you iterate the counter so it 
    // eventually breaks the loop because 
    // i < 10 is no longer true 
    i++; 
} 

这样做同样的事情,因为这

for (var i = 0; i < 10; i++) { 
    //this stuff will happen until 
    //i < 10 
} 

良好的用例的另一种形式,而

一般为当需要发生迭代次数已知时,使用循环,所以通常当迭代数组时,您知道数组for的长度是一个不错的选择,因为您可以明确设置迭代次数。

while的更好的用例是迭代量不是静态的(已知)和/或您正在等待事件发生以打破循环。

1

A while循环将执行一遍又一遍只要满足条件,就是如果条件永不改变,它将进入无穷大。

if将执行一次当条件满足

+2

***如果循环*** ....真的..? – jondavidjohn

+0

哈哈,我陷入了思考'for'循环的问题。修正了我的措辞,但并没有改变我的答案。 –

1

while将继续运行,直到条件为假。
如果条件在块的末尾仍然为真,则循环将重新运行。

if只会运行一次。

1

那么if statement不会回环绕。它只会发生一次,除非你把它放在一个循环中。一个while statement将发生不止一次,只要声明仍然如此。

0

如果你想创建一个无限循环while循环会做的伎俩

var done=false; 
while(!done){ 
    alert("I am annoying"); 
} 
0

for语句可以用while来模拟:

for(var i=0; i<length; i++) {} 

// is the same as 

var i=0; 
while(i<length) { 
    // stuff 
    i++; 
} 

它也用于像循环:

while(true) { 
    // stuff... (like waiting for user input, analyzing some data until 
    // it hits a brick wall and needs to quit) 
    if(some_condition) { 
     break; 
    } 
} 

或其他东西:

while(a != b) { 
    if(a > b) { 
     a -= b; 
    } else { 
     b -= a; 
    } 
} // find the GCD of a and b 

正如您所看到的,它与if完全不同,并解决了其他问题。