程序控制流---循环结构(while循环 do-while循环 for循环)

控制流有两种结构:    条件结构      循环结构

      条件结构三种:基本条件结构,多重条件结构,switch条件结构

      循环结构三种:while循环    do-while循环    for循环

while循环:先判断条件,再执行循环操作,通常在未知循环次数时使用(只知道满足什么条件时停止,不清楚要循环多少次)

do-while循环:先执行、再判断循环条件,对其结果判断是否继续进行循环( 相当于while(true)结合break使用 )

for循环:本质是对while的简化,在已知情况下(循环次数)使用

  for(变量初始化;循环条件;变量更新){ ...... }(已知循环多少次,当循环次数到了,就停止循环)

continue:跳过一次循环

break:跳出单层循环

while循环:(使用while前,必须要声明变量,并对其初始化,如果在条件中声明,则每次都会重新生成,变量不会发生改变,循环不会停止;条件中的变量必须要进行更新到不满足条件才能使循环结束)

while(条件){
    //重复执行的代码
}

例子:生成1-100内偶数的和(思路:1%2==0;2%2==0;......100%2==0)

计算数值从1开始,每次递增1,重复执行的是偶数判断

//此方法每一个数都要判断,性能不好
int i=1;
int sum=0;
while(i<=100){
  if(i%2==0){
    sum+=i;
  }
  i++;
}
sout(sum);
//此方法按照偶数的规律,直接得到偶数以及偶数和的值
int j=2;
int sum=0;
while(j<=100){
  sum+=j;
  j+=2;
}
sout(sum);

例子:录入10个人的年龄,分别计算老年(60以上)、中年(20-59)、幼年(1-19)分别多少人?

Scanner sc=new Scanner(System.in);
//分别用于记录三个年龄段的人数和
int oldCount=0;
int middleCount=0;
int youngCount=0;
int i=1;
while(i<=10){
  sout(“请输入第”+i+“个人的年龄:”);
  int age=sc.nextInt();
  if(age>=60){
    oldCount++;
  }
  else if(age>=20){
    middleCount++;
  }
  else{
    youngCount++;
  }
  i++;
}
sout(“老年人共有:”+oldCount+“,中年人有:”+middleCount+“,幼年有:”+youngCount)

例子:操场800米一圈,要跑4300米,需要跑几圈,不满一圈算一圈

//跑的距离
int len=0;
//跑的圈数
int count=0;
//不能等于4300,不然正好到了4300米时还是会进入循环
while(len<4300){
  count++;
  len+=800;
}
sout("共跑了"+count+"圈");

例子:产生四位验证码

Random ran=new Random();
String code="";
int i=1;
while(i<=4){
//生成0-9的数字
  int n=ran.nextInt(10);
  code+=n;
  i++;
}
sout("生成的验证码是:"+code);

do-while循环(先执行再循环,循环至至少会执行一次(先做,对其结果进行判断,是否继续进行))

do{

  //循环执行条件

}while(条件);

例子:参加考试,判断是否要进行补考(考过了一次根据成绩判断是否进行补考)

Random ran=new Random();
int score;
do{
  score=ran.nextInt();
  sout("考试分数是:"+score);
}while(score<60);
sout("通过了考试!");

例子:登录失败后重新输入的操作

Scanner sc=new Scanner(System.in);
//创建变量
String name;
String pwd;
//创建记录用户名和密码是否正确的变量
boolean nameFlag;
boolean pwdFlag;
do{
    //每次进入循环都要充值一下记录的数据,不然上次循环变更的flag还会保存
  nameFlag=true;
  pwdFlag=true;
  sout("请输入用户名");
  String name=sc.next();
  sout("请输入密码");
  String pwd=sc.next();
  //判断用户名是否一致
  if(!name.equals("admin")){
    sout("用户名输入错误,请重新输入");
  //更改nameFlag
    nameFlag=false;
  }
  //判断密码是否正确
  else if(!pwd.equals("000")){
    sout("密码输入错误,请重新输入");
  //更改pwdFlag
    pwdFlag=false;
  }
}while(!nameFlag||!pwdFlag);
sout("登录成功!");

for循环(本质是对while的简化,在已知循环次数的情况下使用较多)

for(变量初始化;循环条件;变量更新){

  //循环内容代码

}

执行循环:变量初始化——条件判断——循环内容——变量更新——循环条件

1.for循环表达式必须要写(即使不写内容也要写分号)

2.3个表达式允许部分缺失

for( ; ; ){(没有变量初始化,没有循环条件,是个死循环)

  sout("执行循环");

}

int i=1;
for( ;i<=10;i++){
  sout(i);
  //循环条件中有一个i++,循环体中又一次i++,所以打印出来是1.3.5.7.9
  i++;  
}
//最后打印出来是11
sout("退出循环后的i是:"+i);

例子:输入班级的人数,并依次录入每个人的成绩,计算该班级平均分

Scanner sc=new Scanner(System.in);
sout("请输入班级的人数:");
int n=sc.nextInt();
//记录班级总分数
int totalScore=0;
for(int i=1;i<=n;i++){
  sout("请输入第"+i+"个人的成绩");
  int score=sc.nextInt();
  //记累计总分数
  totalScore+=score;
}
//记录平均分
int avg=totalScore/n;
sout("班级平均分为:"+avg);

循环中的控制(循环的内容可以使用break终止,也可使用continue跳过;break表示跳出当前循环,continue表示跳过循环中的一次)

break和continue后写任何代码都不会执行,都会报错

例子:计算1-100的和,当和超过3000时,此时正在累加的数是多少?

int sum=0;
for(int i=0;i<=100;i++){
  sum+=i;
  //判断是否超过3000
  if(sum>3000){
    sout("正在累加的是:"+i+"当前和是:"+sum);
    //退出循环
    break;
  }
}

例子:打印1-10,跳过5不打印

for(int i=1;i<=10;i++){
if(i==5){
  //如果是5就跳过
  continue;
}
//不是5就打印
sout(i);
}

例子:计算1-100所以奇数的和

/********方法一********/
int sum=0;
for(int i=1;i<=100;i+2){
  sum+=i;
}
/*******方法二********/ int sum=0; for(int i=0;i<=100;i++){   //是偶数就跳过   if(i%2==0){     continue;   }   sum+=i; }

猜你喜欢

转载自www.cnblogs.com/gfl-1112/p/12593846.html
今日推荐