十九、while()
循环
19.1 while
和do……while
的执行机理
while
的循环机理:首先要判断表达式是否是真,如果是真,就执行循环体。执行一次之后再看表达式是否是真,如果是真,就再执行…………直到表达式为假。
do……while
的循环机理:第一次执行do{ }
里面的语句,不需要满足条件。然后满足while
的条件就继续执行下去
用while
循环输出1~100:
写法1:
1 | <script> |
循环体中必须自己写i
的改变量。for
循环有for(;;i++){}
结构,while
没有,需要自己写。
必须要使i
有朝一日,不满足i<100
,循环越走越趋向终点。
写法2:
1 | <script> |
写法3:
1 | <script> |
写法4:
1 | <script> |
写法5:
1 | <script> |
写法6:
1 | <script> |
写法7:
1 | <script> |
写法8:
1 | <script> |
写法9:
1 | <script> |
写法10:
1 | <script> |
写法11:
1 | <script> |
故意写成死循环,然后大于了100,那么结束死循环。
注意,通过上面的例子,发现while不擅长做“有明确卡两头
”的问题,因为这样非常容易犯“出1
”错误,要么多一个,要么少一个。
19.2 while
常用在何处(卡量不卡端点)
while擅长什么?
1 | ① 限制结果个数,比如找十个质数;找3个水仙花数;找6个完美数 |
例1:寻找前10位质数
找数量,满足几个,就累加,两个数
1 | <script> |
还可写为死循环的方式,当找到前10个数后结束循环:
1 | <script> |
例2:寻找最小的既能被3整除,也能被5整除的数:
找最小,while(true){}
,写死循环,满足一个条件就break
掉
拧巴的写法:
1 | <script> |
正确的写法:
1 | <script> |
例3:随机两个-3到3的数字,不能都是0
应用:
do{
}while()
1 | <script> |
关于随机数Math.random()
产生一个0~1之间的随机数。注意取的数字肯定不是0,也不是1.也就是说(0,1)开区间
这个随机数可以放大一个倍数:
1 | Math.random() * 8 // 0点几到7点几 |
关于取整:parseInt(Math.random() * 8)
1 | parseInt(Math.random() * 8) // 0 1 2 3 4 5 6 7 |
还可以加上一个常数:
1 | parseInt(Math.random() * 8) + 3 // 3 4 5 6 7 8 9 10 |
得到一个公式:
1 | 想要在`[a,b]`闭区间内随机一个整数,应该写: |
比如,想要随机得到33 34 35 36 四个值中的任意值:
1 | parseInt(Math.random() * 4) + 33; |
比如,想要随机得到5 6 7 8 四个值中的任意值:
1 | parseInt(Math.random() * 4) + 5; |
比如,想要随机得到-3 -2 -1 0 1 2 3 七个值中的任意值:
1 | parseInt(Math.random() * 7) - 3; |
19.3 while
循环转为for
循环
1 | while(abc){ } |