循环
2022-08-13 本文已影响0人
5cc9c8608284
循环
重复的运行一段代码
js支持的3种循环结构:while循环,do-while循环,for循环
while循环
while(条件){
代码块 (循环体)
}
只要条件为真,就会执行代码块
死循环:条件永远满足,永远无法退出循环.
//输出100个 1111
var i=0;
while(i<100){
console.log(1111);
i++
}
do-while循环
do{
循环体
}while(条件)
//输出100个 2222
var i=0;
do{
console.log(2222);
i++
}while(i<100)
while循环和do-while循环的区别,while循环如果条件一开始不满足,则循环体内的内容一次都不会执行,而do-while循环即使条件一开始不满足,也会执行一次循环体
for循环
for(初始化表达式;条件;条件改变表达式){
循环体
}
首先执行初始化表达式,再判断条件,如果满足条件,则执行循环体,最后执行条件改变表达式,再来判断条件,直到条件不满足时跳出循环
for(var i=0;i<100;i++){
console.log('hello world');
}
输出1-100所有的数字
//输出1-100所有的数字
console.log('循环开始',i);
for(var i=1;i<=100;i++){
console.log(i,'i');
}
console.log('循环结束',i);
输出100-1所有的数字
console.log('循环开始',i);
for(var i=100;i>=1;i--){
console.log(i,'i');
}
console.log('循环结束',i);
输出1-100所有的奇数
console.log('循环开始',i);
for(var i=1;i<=100;i++){
if(i%2!=0){
console.log(i,'i');
}
}
console.log('循环结束',i);
//方法2
console.log('循环开始',i);
for(var i=1;i<=100;i+=2){
console.log(i);
}
console.log('循环结束',i);
循环中的关键字
循环控制语句
- break:跳出循环
- continue:停止当前循环体,进入下一次循环
var i=0;
while(i<1){//死循环
}
i++;//永远无法运行
break案例:
var i=0;
while(i<100){//死循环
console.log(i,'i');//0,1,2,3,4,5,6,7,8,9
if(i===9){
break;
}
i++;
}
continue案例
var i=0;
while(i<10){//死循环
console.log(i,'i');//一直在打印9
if(i===9){
continue;//死循环
}
i++;//i=9了以后这里的代码就不再执行了
}
for(var i=0;i<10;i++){
if(i===3){
continue;
}
console.log(i);//0,1,2,4,5,6,7,8,9,这里唯独没有打印3
}
console.log(i,'循环结束');//10
break案例
for(var i=0;i<10;i++){
if(i===3){
break;
}
console.log(i);//0,1,2
}
console.log(i,'循环结束');//3
面试题
for(var i=0;i<3;i++){
for(var j=0;j<3;j++){
console.log(i,j);
if(i+j>=2){
break;
}
}
}
循环应用
累计
例1:求1-100的所有数字相加之和
准备一个变量,初始值为0,然后1-100循环,每次循环,将数字累加到变量中
// 求1-100的所有数字相加之和
let sum=0;
for(let i=0;i<=100;i++){
sum+=i;
}
console.log(sum);//5050
例2.求1-10数字的乘积
// 1-10,数字相乘
var result=1;
for(let i=1;i<=10;i++){
result*=i
}
console.log(result);//3628800
例3.求1-100所有奇数之和
var sum=0;
for(let i=1;i<=100;i+=2){
sum+=i;
}
console.log(sum);//2500
例4.求1-100所有偶数之和
var sum=0;
for(let i=0;i<=100;i+=2){
sum+=i;
}
console.log(sum);//2550
查找
例1:135-145之间,是否存在能整除26的数字
思路:准备一个变量,一开始为false,表示没有找到,然后对135-145进行循环,如果发现满足条件的数字,重新记录变量为true,表示找到了,然后退出循环
// 135-145之间,是否存在能整除26的数字
let min=135;
let max=145;
var flag=false;
for(let i=min;i<=max;i++){
if(i%26===0){
flag=true;
break;//退出循环
}
}
if(flag){
console.log('存在');
}else{
console.log('不存在');
}
例2:打印135-195之间所有能整除26的数字
//打印135-195之间所有能整除26的数字
let min=135;
let max=195;
for(let i=min;i<=max;i++){
if(i%26===0){
console.log(i);
}
}
例2:打印135-195之间第一个能整除26的数字,如果不存在,输出不存在
//打印135-195之间第一个能整除26的数字,如果不存在,输出不存在
let min=135;
let max=195;
var flag=false;
for(let i=min;i<=max;i++){
if(i%26===0){
flag=true;
console.log(i);
break;
}
}
if(!flag){
console.log('不存在');
}
例3:判断一个数是不是素数
// 方法1
let num=8;
let count=0;
// for(let i=1;i<=num;i++){
// if(num%i==0){
// count++
// }
// }
// if(count>2){
// console.log('不是素数');
// }else{
// console.log('是素数');
// }
// 方法2
for(let i=2;i<num;i++){
if(num%i==0){
count++;
break;
}
}
if(count>0||num<=1){
console.log('不是素数');
}
嵌套的循环
分开分析两层循环
案例1.找到1-100的所有素数
// 找到1-100的所有素数
for(var i=1;i<=100;i++){
//判断i是不是素数
var isFound=false;
for(var j=2;j<i;j++){
if(i%j==0){
isFound=true;
break;
}
if(i>1&&!isFound){
console.log(i);
}
}
}
练习
1.在控制台中输出100个*
// 在控制台中输出100个*
for(let i=0;i<100;i++){
console.log('*');
}
- 让用户输入号的数量,然后输出对应数量的
// 让用户输入*号的数量,然后输出对应数量的*
let num=prompt('请输入*号的数量');
//假设用户输入的就是数字
if(isNaN(num)||num==''){
console.log('输入数据有误');
}
for(let i=0;i<+num;i++){
console.log('*');
}
- 输出一个3行5列的*号
// 输出一个3行5列的*号
let str='';
for(let i=0;i<3;i++){//行数
for(let j=0;j<5;j++){
str+='*'
}
str+='\n';
}
console.log(str);
- 用*号输出一个5行的直角三角形
*
**
***
****
*****
var str=''
for(var i=0;i<=5;i++){//行数
for(var j=1;j<=i;j++){//每一行的*数量
str+='*'
}
str+='\n'
}
console.log(str);
var r=15;//行数
for(var i=0;i<=r;i++){//行数i
// 输出一行星号,数量为i
var str='';
for(var j=1;j<=i;j++){
str+='*';
}
console.log(str);
}
- 用*号输出一个5行的等腰三角形
*
***
*****
*******
*********
var r=15;//行数
for(let i=1;i<=r;i++){
var str='';
// 1.拼接空格
for(let j=0;j<r-i;j++){
str+=' '
}
// 2.拼接*
for(let j=0;j<2*i-1;j++){
str+='*'
}
console.log(str);
}
- 输出1-100的所有数字
// 输出1-100的所有数字
for(let i=1;i<=100;i++){
console.log(i);
}
- 输出1-100的所有奇数
// 输出1-100的所有奇数
for(let i=1;i<=100;i++){
if(i%2!=0){
console.log(i);
}
}
- 求1-100之间所有数字之和
//求1-100之间所有数字之和
var sum=0;
for(let i=1;i<=100;i++){
sum+=i;
}
console.log(sum);//5050
- 求1-100之间所有奇数之和
//求1-100之间所有奇数之和
var sum=0;
for(let i=1;i<=100;i++){
if(i%2!=0){
sum+=i;
}
}
console.log(sum);//2500
- 求1-10之间所有数字的积
//求1-10之间所有数字的积
var result=1;
for(let i=1;i<=10;i++){
result*=i
}
console.log(result);//3628800
- 判断数字233是不是素数(素数是指一个数(大于1)仅能被1和自身整除)
//判断数字233是不是素数
var num=233;
var isFound=false;//不是素数
for(let i=2;i<num;i++){
if(num%i==0){
isFound=true;
break;
}
}
if(!isFound&&num>1){
console.log('是素数');
}else{
console.log('不是素数');
}
- 输出1-100中的所有素数
// 输出1-100中的所有素数
var count=0
for(var i=1;i<=100;i++){
// 判断一个数是不是素数
var isFound=false;//不是素数
for(var j=2;j<i;j++){
if(i%j==0){
isFound=true;
break;
}
}
if(!isFound&&i>1){
console.log('是素数',i);
}
}
- 求1-100之间的所有素数之和
var count=0
var sum=0;//记录和
for(var i=1;i<=100;i++){
// 判断一个数是不是素数
var isFound=false;//不是素数
for(var j=2;j<i;j++){
if(i%j==0){
isFound=true;
break;
}
}
if(!isFound&&i>1){
sum+=i;
}
}
console.log(sum,'sum');//1060 'sum'
- 输出99乘法表,效果如下:
1*1=1
1*2=2 2*2=4
1*3=3 2*3=6 3*3=9
1*4=4 2*4=8 3*4=12 4*4=16
1*5=5 2*5=10 3*5=15 4*5=20 5*5=25
1*6=6 2*6=12 3*6=18 4*6=24 5*6=30 6*6=36
1*7=7 2*7=14 3*7=21 4*7=28 5*7=35 6*7=42 7*7=49
1*8=8 2*8=16 3*8=24 4*8=32 5*8=40 6*8=48 7*8=56 8*8=64
1*9=9 2*9=18 3*9=27 4*9=36 5*9=45 6*9=54 7*9=63 8*9=72 9*9=81
// 规律:第一行一个等式 ,第二行二个等式,第三行三个等式,第i行i个等式
for(var i=1;i<=9;i++){
// 拼接i个等式
var str=''
for(var j=1;j<=i;j++){
let s=''
s= `${j}*${i}=${(j)*(i)}`
str+=s+'\t'
}
console.log(str);
}
- 将猜拳游戏升级,记录系统和玩家的积分,获胜者加1分,平局和输者不计分
可参考以下效果:
游戏开始
==============第1轮==============
系统:0分,玩家:0分
你的出拳:剪刀
系统出拳:布
你赢了!
==============第2轮==============
系统:0分,玩家:1分
你的出拳:石头
系统出拳:布
你输了!
==============游戏结束==============
系统:1分,玩家:1分
console.log(' 游戏开始');
let pcScore=0,//系统分数
playerScore=0,//玩家分数
round=1;//记录当前为第几轮游戏
while(true){
console.log(`==============第${round}轮==============`);
console.log(`系统:${pcScore}分,玩家:${playerScore}分`);
var playFist=prompt('请出拳(石头剪刀布)');
if(playFist==null){//表示点击了取消
break;//跳出循环
}
// 出拳不正确
if(playFist!='石头'&&playFist!='剪刀'&&playFist!='布'){
console.log('出拳无效,请重新出拳');
continue;
}
// 出拳正确
console.log(`你的出拳:${playFist}`);
arr=['石头','剪刀','布'],
arrIndex=Math.floor(Math.random()*arr.length);
pcFist=arr[arrIndex],
console.log(`系统出拳:${pcFist}`);
// 判断输赢
// 系统赢
if(pcFist=='石头'&&playFist=='剪刀'||pcFist=='剪刀'&&playFist=='布'||pcFist=='布'&&playFist=='石头'){
console.log('你输了!');
pcScore++
}else if(pcFist==playFist){
console.log('平局');
}else{
console.log('你赢了!');
playerScore++
}
// 轮次加1
round++;
}
console.log(' ==============游戏结束==============');
console.log(`系统:${pcScore}分,玩家:${playerScore}分`);