while语句的一些好的用法是什么?
What are some good uses of the while statement?
每当我想到使用while loop
时,我不明白为什么我不能使用if statement
代替。我知道while循环在给定语句为真时运行,但如果条件在块内立即终止,那么我无法想象在为真时发生任何事情。如果有人能给我如何/为什么我应该使用while loop
的例子。非常感谢。
我将尽量给你一个高层次的答案,因为我认为这将更容易直观地理解。
把所有的算法想象成食谱。一个典型的食谱可能有如下部分:
- 如果花生有壳,将其与壳分离
- 将鸡蛋打至起泡
- 取5个洋葱,每个切成两半
这些类型的指示让你以不同的方式完成任务。
第一个实际上是一个"if"语句。如果一个条件(花生有壳)是真的,你就做某事。
if (not shelled) {
shell the peanut! // happens once
}
第二个是while循环。当还没有打匀和起泡的时候,你打鸡蛋。你不断地重复同样的事情(搅拌),当你这样做的时候,你会看它(一遍又一遍),看看它是否已经变得非常起泡。一旦它变得起泡,搅拌得足够充分,你就可以停下来了。当你停止时,那是因为你已经通过了"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
}
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
的一个更好的用例是当迭代的数量不是静态的(已知的)和/或您正在等待一个事件发生来打破循环。
while
将继续运行,直到条件变为false。
如果在语句块结束时条件仍然为真,循环将重新运行。
if
只运行一次
好吧,if statement
不会循环回来。它只会发生一次,除非你把它放在一个循环中。只要语句仍然为真,while statement
就会发生不止一次。
只要条件满足,while
循环将一遍又一遍地执行,因为如果条件不改变,它将无限长。
当条件满足时,if
将执行一次
如果你想创建一个无限循环一个while循环就可以了
var done=false;
while(!done){
alert("I am annoying");
}
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
非常不同,并且解决了其他问题。
- 这是什么 ==- javascript 运算符
- 我的单元测试选项是什么
- 打破承诺链的好方法是什么
- 在AngularJS应用程序中使用封装指令和路由的推荐方式是什么
- Javascript中的空白是什么
- 是什么让一个“;Uncaught RangeError:超过了最大调用堆栈大小“;错误(Chrome,在其他浏览器中显示
- 在JavaScript中拆分日期字符串的更好方法是什么
- 将jQuery.ech()方法转换为本地JavaScript抽象的最佳方法是什么
- 处理浮点错误的最佳方法是什么
- javascript导入的最佳实践是什么
- 基于窗口宽度jquery的函数的替代方法是什么
- 在ng重复循环中显示条件内容的最佳方式是什么
- 我的客户端选项是什么
- javascript中||的正确用法是什么
- 在 Promise 调用的错误函数回调后附加对象的用法是什么
- apply() 的这种用法在 Javascript 中是什么意思
- 此代码中 onsubmit 事件处理程序中的返回用法是什么
- while语句的一些好的用法是什么?
- websocket的其他用法是什么(除了comet)
- Alert 在 JavaScript 中的这种用法是什么