unit7 程序控制结构

来源:互联网 发布:祖传秘方淘宝可以卖吗 编辑:程序博客网 时间:2024/06/02 01:32

unit7 程序控制结构

1. 程序逻辑

2. 选择结构

3. 循环结构

4. 循环的跳转

 

1        程序逻辑

1.1        顺序结构

如同阅读文章一样,从入口到出口一条龙执行完毕,如之前购物小票打印便是顺序结构。

1.2        分支结构

通过条件判断,选择性执行代码块。

1.3        循环结构

通过对给定条件的判断,完成代码的重复执行。

2        选择结构

2.1        if语句

单条件判断,格式

if(条件){

       执行的代码

}

条件的数据类型为boolean,可以是返回结果为boolean类型的方法,也可以是true、false常量、关系运算符、boolean类型的变量。当条件为true的时候,条件成立,执行后面的代码块,不成立为false,则不执行。

       //if:单条件判断,总价超过1000,打8

       double total = 1000;

       if (total > 1000){

           total *=0.8;

       }

2.2        if……else语句

互斥条件判断

 

 


       //if else,条件判断,总价超过1000,打8折,否则打9折       double total = 1001;       if (total > 1000){           total *=0.8;       }else {           total *=0.9;}


2.3        if……else if……else语句

多条件判断,可以在多个if条件中选择满足条件的代码块执行,不满足执行else体的代码。

       double total = 1000;       if (total > 1000){           total *=0.8;       }else if(total >500){           total *=0.9;       }else{               //else可写可不写,如果不写,则当不满足if条件直接跳过执行下面的语句           total *=0.95;}


2.4        多重选择---switch语句

在现实业务中,许多场景需要我们从多个固定的值中选出一个进行操作。比如登录系统,选择身份:老板或者收银员,进入的系统也就不一样。

Switch语句可以根据一个变量值,对比多个可选值,当变量值匹配到可选值以后,执行该值对应的代码块。

        

                 //switch:多重选择       int choose = 1;//1代表老板,2代表收银员       switch (choose) {       case 1:       //代表某一情况的值,当choose==1时,则执行该段代码块           System.out.println("boss");           break;       case 2:           System.out.println("cashier");           break;        default:   //当以上值都没匹配到时,执行该段代码,可写可不写           System.out.println("enter error");           break;       }

3        循环结构

3.1        while循环

有时候需要根据给定的条件循环执行代码,这个时候使用while循环完成任务,while后面括号里的表达式为布尔类型,true执行循环代码,false退出循环,执行时,先判断是否满足条件,满足,值为true则执行,不满足就退出循环。

  

         //while循环           int num1 = 0;           while (num1 <= 10){  //只要num1满足小于等于10,代码就会一直执行下去,括号中的数据类型为布尔类型,为true时,执行循环代码,flase结束循环           System.out.print(++num1+"、");       }

3.2        do……while循环

和while语句区别在于:while先判断条件是否成立,再去执行,do……while是先执行代码,再判断条件是否成立。

 

             //do……while,先执行,后判断              do {              System.out.println("先执行代码");       } while (1>2);

3.3        for循环

循环,当需要对代码循环条件为计次循环的时候,可以使用for循环。

a)    for循环语句使用格式

l 循环的重要组成部分

a)      循环变量初始化 (初始化表达式)

b)      循环出口(布尔表达式)

c)       循环增量(步进表达式)

d)      循环逻辑内容(循环体)

 

l for循环格式

for(初始化表达式①;布尔表达式②;步进表达式④){

                 循环体③

}

执行顺序: ①②③④>②③④>②③④… ②不满足为止。

①负责完成循环变量初始化

②负责判断是否满足循环条件,不满足则跳出循环

③具体执行的语句

④循环后,循环条件所涉及变量的变化情况

b)   for循环注意事项

a)①②③④四个部分均可以为空

当①为空时,注意变量作用域的范围变化

当②为空时,为条件永远为true的死循环

当③为空时,通常没有意义

当④为空时,可以将其加入到循环体中,或同样成为死循环

b)      初始化表达式①的部分可以同时定义多个变量

步进表达式可以同时将多个循环相关变量改变,控制循环条件

   

      

//for循环打印从0到99数字       for (int i = 0; i <= 99;i++) {           System.out.print(i + " 、");       }



3.4        foreach循环

遍历循环,类似jquery中$.each()方法对元素的遍历操作。Foreach可以快速的对数组、集合的成员进行一次遍历操作。

    

          //foreach遍历操作              int[] arr = {1,2,3,4,5};              for (int i : arr) {         //i:每次循环时候,对应数组中的一个int类型数据,arr:数组,暂时理解为一个容器,里面放的全都是int类型数据              System.out.println(i);       }

3.5        循环嵌套

很多时候,一个循环是无法满足我们的业务需要,可能会用到循环中嵌套循环,就像if和else if那样,语句中还可以有if语句。

这里以99乘法表作为案例:

   

    //使用for循环打印99乘法口决表       for (int i = 1; i < 10;i++) {           for (int j = 1; j <= i;j++) {              System.out.print(j + " * " + i + " = " + j * i+"\t");           }           System.out.println();       }       System.out.println();       //使用while打印99乘法口决表       int x = 1;       while (x<=9) {           int y = 1;           while (y<=x) {              System.out.print(y+ " * " + x + " = " +x*y+"\t");              y++;           }           x++;           System.out.println();       }    }

4        循环的跳转

Java提供continue、break、return关键字实现对循环的控制、结束功能。

4.1        break语句

结束循环,使用break强行终止循环,而不是当循环的条件不满足的时候才结束,一旦遇到break,系统就会结束当前循环,执行循环外的代码。

   

        //循环的跳转       //break:结束当前所在的循环,无论哪种       int num2 = 1;       while (num2<10){           if (num2>3) {              System.out.println("强行结束循环!");              break;           }           System.out.println("打印:" + num2);           num2++;       }       for (int i = 0; i < 10;i++) {           System.out.println("打印:" + i);           if (i>3) {              System.out.println("打印结束!");//注意,当使用break结束循环,那么break后不能再有任何代码,因为那是无法被执行到的!              break;           }       }       //但是break只会结束当前所在的循环,如果是双层嵌套循环,是无法结束外层循环。       for (int i = 0; i < 10;i++) {           for (int j = 0; j < 10; j++) {              System.out.println("内层循环打印了j:" + j);              if (j == 3) {                  System.out.println("这里已经结束了内层循环,但是外层循环还是会继续!");                  break;              }           }           System.out.println("外层循环打印i:" + i);       }

continue语句

       continue 的功能和break有点类似,区别是continue只是忽略了本次循环剩下的代码,接着开始下一次循环,并不会终止循环,而break是完全终止循环本身。

 

             //continue:忽略本次循环剩下的代码           for (int i = 0; i < 5; i++) {           if (i == 2) {              System.out.println("这里忽略了剩下的代码,所以你看不到这是第几次循环");//记住,这里和break一样,不能在continue所在代码块中后面继续写代码。              continue;           }           System.out.println("这是第" + i + "次打印!");       }

 

4.2        return语句

return本身并不是用来控制循环的,而是结束所在的方法,后面可跟上数据、变量、常量和表达式返回给调用者,在这里可以起到结束方法作用,当使用return时,无论多少循环嵌套,都会被直接结束!

 

 

5        练习:

1、99乘法表打印(使用for和while循环打印)


1、 效果是打印9行,9列,也就是说是一个双层for循环,判断的条件是列数和行数都小于9。

2、 定义两层for循环,外层循环打印行,内层循环打印列。

3、 依据的条件是:内层循环打印的列数不能大于当前外层打印的行数

for(int i = 1; i <=9 ;i++){               for(int j = 1; j<= i ;j++){                      System.out.print(j + "*" +i + "=" + i * j +"\t" );        }        System.out.println();        }


2、再看while循环打印99乘法表

  intx = 1;       while(x<=9){              intj = 1;              while(j<=x){                     System.out.print(j + "*" +x + "=" + x * j +"\t" );                     j++;       }              System.out.println();              x++;       }


              2、水仙花数:一个三位数,每位数字的3次方相加等于该数本身。

              思路:循环遍历所有的三位数,然后判断条件是否成立。

            

     for(int i = 100 ; i < 1000 ;i++){                     int bai =i / 100;                     int shi =i % 100 / 10 ;                     int ge = i% 10 ;                     if(bai * bai * bai + shi * shi * shi + ge * ge *ge == i){                            System.out.println(i + "是一个水仙花数!");                     }                          }


              3、母鸡3元,公鸡4元,小鸡0.5元,100元买100只鸡

                     思路:三层for循环,依次把每一种可能性遍历出来,然后判断条件是否成立,就OK!

                            条件:买的鸡一共数量=100,并且花了100块钱。

       int temp = 0;              for(  int muji = 1;muji<=98 ;muji++){                     for(intgongji  = 1; gongji<=98 ; gongji++){                            for(intxiaoji  = 1;xiaoji <=98 ;xiaoji++){                                   if((muji+ gongji +xiaoji == 100) && (muji *3 +gongji*4 +xiaoji *0.5 ==100)){                                          System.out.println("母鸡买了"+muji+"只,战斗鸡买了"+gongji+"只,小鸡买了"+xiaoji+"只");                                                                            }                                                 temp++;                            }                     }              }


       4、求101~200素数,除了1和他本身外不能被任何数整除。

       思路:循环遍历101~200之间的数,内层一个循环遍历1~该数之间的数,依次对内层循环遍历的数取余,如果出现i%j==0的情况,就说明该数不是素数!

         for(int i=102;i<200;i++){                     booleanboo = true;                            for(intj = 2; j<i; j++){                                   if(i%j==0){                                          boo=false;                                   }                            }                            if(boo){                            System.out.println(i+"素数");                            }                     }

下面是我练习的代码:

package day07;public class Program {public static void main(String[] args) {//if:单条件判断,总价超过1000,打8折,否则打9折double total = 1000;if (total > 1000) {total *= 0.8;}else if(total >500){total *= 0.9;}else{//else可写可不写,如果不写,则当不满足if条件直接跳过执行下面的语句total *= 0.95;}//switch:多重选择int choose = 1;//1代表老板,2代表收银员switch (choose) {case 1://代表某一情况的值,当choose==1时,则执行该段代码块System.out.println("boss");break;case 2:System.out.println("cashier");break;default://当以上值都没匹配到时,执行该段代码,可写可不写System.out.println("enter error");break;}//while循环int num1 = 0;while (num1 <= 10){//只要num1满足小于等于10,代码就会一直执行下去,括号中的数据类型为布尔类型,为true时,执行循环代码,flase结束循环System.out.print(++num1+"、");}System.out.println();//do……while,先执行,后判断do {System.out.println("先执行代码");} while (1>2);//for循环打印从0到99数字for (int i = 0; i <= 99; i++) {System.out.print(i + " 、");}//foreach遍历操作int[] arr = {1,2,3,4,5};for (int i : arr) {//i:每次循环时候,对应数组中的一个int类型数据,arr:数组,暂时理解为一个容器,里面放的全都是int类型数据System.out.println(i);}//使用for循环打印99乘法口决表for (int i = 1; i < 10; i++) {for (int j = 1; j <= i; j++) {System.out.print(j + " * " + i + " = " + j * i+"\t");}System.out.println();}System.out.println();//使用while打印99乘法口决表int x = 1;while (x<=9) {int y = 1;while (y<=x) {System.out.print(y+ " * " + x + " = " +x*y+"\t");y++;}x++;System.out.println();}//循环的跳转//break:结束当前所在的循环,无论哪种int num2 = 1;while (num2<10){if (num2>3) {System.out.println("强行结束循环!");break;}System.out.println("打印:" + num2);num2++;}for (int i = 0; i < 10; i++) {System.out.println("打印:" + i);if (i>3) {System.out.println("打印结束!");//注意,当使用break结束循环,那么break后不能再有任何代码,因为那是无法被执行到的!break;}}//但是break只会结束当前所在的循环,如果是双层嵌套循环,是无法结束外层循环。for (int i = 0; i < 10; i++) {for (int j = 0; j < 10; j++) {System.out.println("内层循环打印了j:" + j);if (j == 3) {System.out.println("这里已经结束了内层循环,但是外层循环还是会继续!");break;}}System.out.println("外层循环打印i:" + i);}//continue:忽略本次循环剩下的代码for (int i = 0; i < 5; i++) {if (i == 2) {System.out.println("这里忽略了剩下的代码,所以你看不到这是第几次循环");//记住,这里和break一样,不能在continue所在代码块中后面继续写代码。continue;}System.out.println("这是第" + i + "次打印!");}/*母鸡3元,公鸡4元,小鸡0.5元,100元买100只鸡,成立的条件就是三者总数相加等于100,总价等于100 * 条件为:muji + gongji + xiaoji == 100 && muji * 3 +gongji * 4 + xiaoji * 0.5 ==100 * 思路:三层for循环,直到满足条件*/for (int muji = 1; muji < 98; muji++) {for (int gongji = 1; gongji < 98; gongji++) {for (int xiaoji = 1; xiaoji < 98; xiaoji++) {if (muji + gongji + xiaoji == 100 && muji * 3 +gongji * 4 + xiaoji * 0.5 ==100) {System.out.println("购买方案为:母鸡:" + muji + "只,"+"公鸡:" + gongji + "只,"+"小鸡:" + xiaoji + "只");}}}}}}


0 0
原创粉丝点击