SentralLiu

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

1.循环(重点)

1.1 while循环
=======================while循环===========================
//案例:打印100遍“helloworld”
//int i = 1000;  //如果初始为1000,则一次都不执行
int i = 1;  //初始化语句-与条件判断有关
int b = 1;  //初始化语句? 不是

while(i<=100){  //条件判断
    System.out.println("helloworld-"+i);  //循环体
    i++;   //增量语句-要为条件判断服务
    b++;   //增量语句? 不是
}

//while循环特点: 先判断再执行,执行次数为0~n次; 适用于循环次数可预见的情况


=======================while案例===========================
//课堂案例1:计算1~100的总和
//分析:1.先循环1~100  2.进行累加
int i=1;
int sum=0; //求和的变量初始为0
while(i<=100){
    sum += i;  //sum = sum+i;
    i++;
}
System.out.println("求和:"+sum);

//案例2:1~100之间所有偶数和
//分析:1.先循环1~100  2.判断为偶数,才累加
i = 1;
sum = 0;
while(i<=100){
    if(i%2==0){
        sum += i;
    }
    i++;
}
System.out.println("1~100的偶数和:"+sum);

1.2 do while循环

======================dowhile循环========================
//dowhile循环
//语法结构:
/*
    初始化语句
    do{
       循环体语句;
       增量语句
    }while(条件判断);
    
    //执行流程:
    1.初始化语句--只执行一次
    2.执行循环体语句
    3.增量语句
    4.条件判断,条件成立,回到第2句继续执行循环体;否则,跳出循环
*/
//案例: 打印100遍helloworld
//int i=1000;  //也会打印1遍
int i = 1; //初始化语句
do{
   System.out.println("hello,world-"+i);
   i++;
}while(i<=100);

//dowhile特点:先执行,后判断,至少执行一次;适用于循环次数不可预见

======================dowhile案例========================
//案例:学生先抄写作业,老师给出评语,判断是否需要继续抄写
//while:
/*
System.out.println("学生正在抄写作业...");
System.out.println("抄写作业完毕...");
System.out.println("请判断是否需要继续抄写:(y/n)");
Scanner sc = new Scanner(System.in);
char flag = sc.next().charAt(0);
while(flag=='y'){
    System.out.println("学生正在抄写作业...");
    System.out.println("抄写作业完毕...");
    System.out.println("请判断是否需要继续抄写:(y/n)");
    flag = sc.next().charAt(0);
}
System.out.println("抄写完毕~!");
*/

//dowhile-先执行,后判断;  适用于循环次数不可预见
Scanner sc = new Scanner(System.in);
char flag;
do{
    System.out.println("学生正在抄写作业...");
    System.out.println("抄写作业完毕...");
    System.out.println("请判断是否需要继续抄写:(y/n)");
    flag = sc.next().charAt(0);
}while(flag=='y');
System.out.println("抄写完毕~!");

1.3 for循环(最常用)

======================for循环========================
//for循环(最常用)
/*
    语法结构:
    for(初始化语句;条件判断;增量语句){
        循环体语句;
    }
    
    //执行流程: 和while很类似
    1.初始化语句--只执行一次
    2.条件判断;如果成立,则执行循环体;否则跳出循环
    3.循环体语句
    4.增量语句; 回到第2句继续判断
*/
//案例:打印100遍helloworld
for(int i=1;i<=100;i++){
    System.out.println("helloworld-"+i);
}
//System.out.println(i);  //外围不是i的作用域了

//for特点:和while类似,先判断,后执行,循环次数为(0~n次);适用循环次数可预见的情况

======================for循环案例========================
//案例1:请输入一个数n,求n的阶乘  例如3的阶乘: 1*2*3
/*
System.out.print("请输入求阶乘的数:");
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int ji = 1;  //求积,初始为1
for(int i=1;i<=n;i++){
    ji *= i;  //ji = ji*i;
}
System.out.println(n+"的阶乘为:"+ji);
*/

//案例2:请输入5名同学的分数,并求出平均分
//分析:1.循环5次从控制台录入  2.通过一个变量,将分数累加  3.再除以5
/*
double sum = 0;  //求和的变量
for(int i=1;i<=5;i++){
    System.out.print("请输入第"+i+"个学员成绩:");
    int score = sc.nextInt();
    sum += score;
}
System.out.println("平均分为:"+(sum/5));
*/

//三种循环的应用场景:
//1. 先判断,后执行,且循环次数可预见--for,while
//2. 先执行后判断,且循环次数不可预见--dowhile


======================死循环问题========================
//关于死循环问题:
//-------需要避免的死循环--------
/*
for(int i=10;i>1;i++){
    System.out.println("需要避免的死循环--增量语句与条件判断无关");
}*/

//----------漂亮死循环-------------
/*
for(;;){
    System.out.println("漂亮死循环...");
}*/
//--------最漂亮(常用)的死循环-------
while(true){  //do{}while(true);
    //一般做控制台录入
    System.out.println("常用的死循环...");
}


2. 循环控制(重点)
//循环控制关键字: break,continue

======================continue========================
//案例1:循环打印1~10,除了3的倍数不打印---1,2,4,5,7,8,10
//分析,1,先将1~10进行循环  2.判断3的倍数不打印
/*for(int i=1;i<=10;i++){
    if(i%3==0){
        continue;  //跳出当前循环,不影响下一次循环的执行
    }
    System.out.println(i);
}*/


======================break========================
//案例2:循环打印1~10,遇到3的倍数则结束循环----1,2
for(int i=1;i<=10;i++){
    if(i%3==0){
        break;  //跳出循环
    }
    System.out.println(i);
}
//应用场景:
//continue: 用在循环中,跳出当次循环的情况
//break:用在switch和循环中,结束switch和循环


======================综合案例========================
//猜数字游戏:请猜1~1000以内的数:
/*例如:答案为600(随机) 
        输入:500---小了             
        输入:700---大了
        输入:600---恭喜中500万,请全班吃饭;(退出循环)
        
  升级1: 加入随机数
  升级2: 加入范围提示---最大值max  最小值min
  升级3: 加入异常判断,如果输入的数比min小或比max大    
*/

//Math.random();  0.0~1.0的double类型值: 0.0<=x<1.0
//Math.random()*1000  0.0~1000  0.0<=x<1000
int daAn = (int)(Math.random()*1000)+1;  //1<=x<=1000 答案用随机数表示
Scanner sc = new Scanner(System.in);
int min = 1;
int max = 1000;
do{
    System.out.print("请输入"+min+"~"+max+"以内的数:");
    int num = sc.nextInt();
    //如果录入的值比最大值还大,或者比最小值还要小,则该值无意义
    if((num<min)||(num>max)){
        System.out.println("您的输入有误,请重新输入~");
        continue;  //如果出现问题,则直接返回
    }
    if(num>daAn){  //录入的值大于答案
        System.out.println("大了");
        max = num-1;  //最大值变了
    }else if(num<daAn){
        System.out.println("小了");
        min = num+1;  //最小值变了
    }else{
        System.out.println("恭喜你,中了500万,请全班吃饭~");
        break;
    }
}while(true);


3.循环嵌套
======================循环嵌套========================
//循环嵌套: 在循环中,再包含循环
/*
    打印3行4列的*
    ****
    ****
    ****
    分析:先考虑打印1行4列--每次打印1颗星,循环4次
*/
for(int i=1;i<=3;i++){ //外层打印行
    //****
    for(int j=1;j<=4;j++){   //内层打印列
        System.out.print("*");
    }
    System.out.println();  //回车
}

======================嵌套案例========================
//计算3个班,每个班5名同学的平均成绩
//分析:可以看成3行5列学员录入
Scanner sc = new Scanner(System.in);

for(int i=1;i<=3;i++){
    double sum = 0;
    for(int j=1;j<=5;j++){
        System.out.print("请输入第"+i+"个班,第"+j+"名学员成绩:");
        int score = sc.nextInt();
        sum += score;  //学员成绩累加
    }
    
    System.out.println("第"+i+"个班的平均分为:"+(sum/5));
}

==================打印直角与等腰三角形====================
/*
   打印4行4列的直接三角形
    *
    **
    ***
    ****
    分析:外层循环4次(4行),内层循环次数根据外层而变化
*/
for(int i=1;i<=4;i++){ //i=1
    for(int j=1;j<=i;j++){ //打印1列
        System.out.print("*");
    }
    System.out.println(); //回车
}

/*
  打印4行的等腰三角形
     *
    ***
   *****
  *******
  分析:1.外层循环4次(4行),内层循环次数根据外层而变化
        2.在内层循环前面先推空格,第1行推3个空格,第2行2个,第三行1个
*/
for(int i=1;i<=4;i++){ //i=1,i=2
    for(int j=1;j<=4-i;j++){ //i为1,则打印3个空格  i为2,则打印2个空格..
        System.out.print(" ");
    }

    for(int j=1;j<=2*i-1;j++){
        System.out.print("*");
    }
    
    System.out.println();  //回车
}
 

posted on 2021-10-13 19:28  SentralLiu  阅读(58)  评论(0)    收藏  举报