while语句的一些好用途是什么?

时间:2011-08-31 18:16:46

标签: javascript

每当我想到使用while loop时,我都不明白为什么我不能只使用if statement。我知道while循环运行'while'给定的语句是真的,但是如果条件瞬间在块内终止,那么我无法看到发生的任何事情,而'有些事情是真的。如果有人能举例说明我应该如何/为什么要使用while loop。非常感谢。

7 个答案:

答案 0 :(得分: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
}

答案 1 :(得分: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循环,因此通常在迭代数组并且知道数组for的长度时一个很好的选择,因为你可以明确地设置迭代量。

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

答案 2 :(得分:1)

只要符合条件,while循环就会反复执行 ,如果条件永远不会改变,它将会变为无穷大。

满足条件时if将执行一次

答案 3 :(得分:1)

while会一直运行,直到条件变为假 如果条件在块结束时仍然为真,则循环将重新运行。

if只会运行一次。

答案 4 :(得分:1)

if statement不会循环回来。它只会发生一次,除非你把它放在循环中。只要声明仍然正确,while statement将不止一次发生。

答案 5 :(得分:0)

如果你想创建一个无限循环,while循环就可以实现这个技巧

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

答案 6 :(得分:0)

可以使用while模拟for语句:

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非常不同,并解决了其他问题。