循环结构

   :当重复执行相同的代码或者是相似的代码时。

循环三要素:
   1): 循环变量的声明:用于控制循环次数的循环因子
   2): 循环条件: 用于判断是否执行相同或相似内容(循环体)的条件
   3):循环变量的改变方向:
             向着循环结束的方向改变。
(1)for循环:

   语法:
      for(变量的声明和初始化;循环条件;变量的改变方向){
        循环体;
      }

   执行逻辑:
       程序遇到for时,一定执行 变量的声明和初始化
            然后执行循环条件的判断
        如果为false,会跳过循环结构,执行后续代码。
        如果为true,执行循环体,然后再执行变量的改变
        再执行循环条件的判断,
        .......

   循环体:是要重复执行的相同或相似逻辑


  
   break关键字:用在循环结构中时,表示结束/打断循环
   continue关键字:用在循环结构中,表示结束当次循环体,继续
                  下一次循环


   双层for循环
                   外层变量执行一次,内层变量执行一遍
                   或
                   外层变量控制行数,内层变量控制列数

经典案例,打印、等腰三角形和菱形

public static void main(String[] args){

        /* 练习2: 打印等腰三角形
                *      i=0,    j = 5
               ***     i=1,    j = 4 5 6 
              *****    i=2,    j = 3,4,5,6,7
             *******   i=3,    j = 2,3,4,5,6,7,8
            *********  i=4,    j = 1~9
            开始打印*时,j与i的关系
                  i+j = 5;
                  j>=5-i;
            结束打印*时,j与i的关系
                  i+5 =j;
             打印*的j的范围
                  j<=i+5;         

                *      i=1,    * 1   j = 4
               ***     i=2,    * 3   j = 3;
              *****    i=3,    * 5   j = 2;
             *******   i=4,    * 7   j = 1;
            *********  i=5,    * 9   j = 0
              
              *的个数与行号的关系
                 count = 2*i-1;
              打印空格的关系:
                 j <= 5-i;      
        */
        for(int i=0;i<5;i++){
            for(int j = 0;j<9;j++){
                if(j>=4-i&&j<=i+4){
                    System.out.print("*");
                }else{
                    System.out.print(" ");
                }
            }
            System.out.println();
        }
        for(int i=1;i<6;i++){
            for(int j=1;j<6-i;j++){
                System.out.print(" ");
            }
            for(int j=0;j<2*i-1;j++){
                System.out.print("*");
            }
            System.out.println();
        }

        for(int i=0;i<5;i++){
            for(int j=0;j<4-i;j++){
                System.out.print(" ");
            }
            for(int j=0;j<2*i+1;j++){
                System.out.print("*");
            }
            System.out.println();
        }
        /* 打印菱形,找出j的位置与i的关系
                *      i=0      j=4
               ***     i=1      j=3,4,5
              *****    i=2      j=2,3,4,5,6,
             *******   i=3      j=1,2,3,4,5,6,7
            *********  i=4      j=0,1,2,3,4,5,6,7,8
             *******   i=5      j=1,2,3,4,5,6,7
              *****    i=6      j=2,3,4,5,6,
               ***     i=7      j=3,4,5
                *       i=8      j=4    

           上一部分:
                 j>=4-i;
                 j<=i+4;
           下一部分:
                j>=i-4;
                j<=12-i;
        */
        for(int i=0;i<9;i++){
            if(i<5){
                for(int j=0;j<9;j++){
                    if(j>=4-i&&j<=i+4){
                        System.out.print("*");
                    }else{
                        System.out.print(" ");
                    }
                }
            }else{
                for(int j=0;j<9;j++){
                    if(j>=i-4&&j<=12-i){
                        System.out.print("*");
                    }else{
                        System.out.print(" ");
                    }
                }
            }
            System.out.println();
        }
        /*第二种 找到龙哥与*号的关系,循环控制什么时候打红歌或者*
                *      i=0   *1   j=4
               ***     i=1   *3   j=3,4,5
              *****    i=2   *5   j=2,3,4,5,6,
             *******   i=3   *7   j=1,2,3,4,5,6,7
            *********  i=4   *9   j=0,1,2,3,4,5,6,7,8
             *******   i=5   *7   j=1,2,3,4,5,6,7
              *****    i=6   *5   j=2,3,4,5,6,
               ***     i=7   *3   j=3,4,5
                *       i=8   *1   j=4    


            上一部分:
                    i+j=4;
                    j<4-i;打印空格
                    count < 2*i+1;
            下一部分:
                   i-4=j;
                   j<i-4;打印空格
                   count <17-2*i
        */

        for(int i=0;i<9;i++){
            if(i<5){
                for(int j=0;j<4-i;j++){
                    System.out.print(" ");
                }
                for(int j=0;j<2*i+1;j++){
                    System.out.print("*");
                }
            }else{
                for(int j=0;j<i-4;j++){
                    System.out.print(" ");
                }
                for(int j=0;j<17-2*i;j++){
                    System.out.print("*");
                }
            
            }
            System.out.println();
        }
    }

(2)while循环
    语法:

    while(循环条件){
       循环体
    }

    执行逻辑:
        当程序遇到while时,一定执行循环条件,
          如果判断结果为false,就结束循环结构,执行后续代码
          如果判断结果为true,就执行循环体,
          然后再判断循环条件......

通常不会使用while,因为缺少变量的声明,初始化和变量的改变

一般多用在死循环,只有达成条件才可能结束,用于要多次输入

语法

 while(true){
       循环体

break;
    }
(3)do-while循环
      语法:
      do{
       循环体
      }while(循环条件);


      执行逻辑:当程序遇到do关键字时,一定先执行一次
        循环体,然后再判断循环条件,
        如果条件为false,结束循环结构,执行后续代码
        如果条件为true,再执行一次循环体,
        然后再判断条件的成立与否
        ........

    
   while/do-while/for的区别:

   while/do-while:适合不知道循环次数的逻辑
   for:适合知道循环次数的逻辑

   while/for一般先判断条件,再执行循环体
   do-while:一定先执行一次循环体,再判断条件

   小技巧:什么时候使用while,什么时候使用do-while
         某些逻辑可以翻译成如下:

     当......就执行.....:适合使用while
     做.....直到.......:适合使用do-while

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值