循环

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);

循环中的关键字

循环控制语句


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('*');
}
  1. 让用户输入号的数量,然后输出对应数量的
// 让用户输入*号的数量,然后输出对应数量的*
let num=prompt('请输入*号的数量');
//假设用户输入的就是数字
if(isNaN(num)||num==''){
  console.log('输入数据有误');
}
for(let i=0;i<+num;i++){
  console.log('*');
}
  1. 输出一个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);
  1. 用*号输出一个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);
}
  1. 用*号输出一个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. 输出1-100的所有数字
// 输出1-100的所有数字
for(let i=1;i<=100;i++){
  console.log(i);
}
  1. 输出1-100的所有奇数
// 输出1-100的所有奇数
for(let i=1;i<=100;i++){
  if(i%2!=0){
    console.log(i);
  }
}
  1. 求1-100之间所有数字之和
//求1-100之间所有数字之和
var sum=0;
for(let i=1;i<=100;i++){
  sum+=i;
}
console.log(sum);//5050
  1. 求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. 求1-10之间所有数字的积
//求1-10之间所有数字的积
var result=1;
for(let i=1;i<=10;i++){
  result*=i
}
console.log(result);//3628800
  1. 判断数字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. 输出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. 求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'
  1. 输出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分,平局和输者不计分

可参考以下效果:

游戏开始
==============第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}分`);
上一篇 下一篇

猜你喜欢

热点阅读