zoukankan      html  css  js  c++  java
  • day04--Java流程控制

    今天主要学习如下内容
      1. 顺序结构和选择结构,选择结构有两种实现方式if和switch,
      2. 循环结构
      3 .跳转控制语句

    JAVA流程控制

    • 一个Java程序,通常是由多条符合Java语法规则的语句组成的。
    • 一个Java程序的执行,一定意味着多条Java语句的执行。
    • 既然是多条Java语句的执行,执行的结果就一定与语句执行的顺序有关,同样的语句,不同的执行顺序,结果可能不同

    因此我们需要知道,Java语言如何控制多条语句的执行顺序——通过流程控制(具体来说,是通过3种结构)

     

    1.顺序结构

     1 package com.controlflow.sequential;
     2 
     3 /** 6  *
     7  *  顺序结构:描述的是Java语句之间,从上到下(或从左到右)依次执行的执行顺序
     8  *
     9  *  顺序结构是程序中最简单最基本的流程控制,没有特定的语法,就是按照代码书写的顺序执行。
    10 
    11     对于顺序结构而言,写在前面的代码先执行,写在后面的代码后执行
    12  */
    13 public class Demo {
    14 
    15   public static void main(String[] args) {
    16     int i = 1;
    17     int b = 2;
    18   }
    19 
    20 }

    顺序结构的流程图

     2.选择结构

      选择结构中的代码顺序和顺序结构中代码的执行顺序有明显的不同:

    • 选择结构有特定的语法规则,代码要执行具体的逻辑运算进行判断。
    • 逻辑运算的结果有两个,所以产生选择,按照不同的选择执行不同的代码。
    • Java中,选择结构有2种实现形式,if语句 和switch语句

    if语句实现选择结构有3种格式

    回忆一下,之前我们所讲解的三元运算符,和if语句的第二种格式所表达的语义是否很相似呢?

    if语句第二种格式和三元运算符既然如此相似,是否它们是完全等价的呢?

    • 三元运算符的操作都可以使用if语句改进,反之不成立
    • 什么时候不成立呢?

     

     

      1 package com.cskaoyan.controlflow.select;
      2 
      3 import java.util.Scanner;
      4 
      5 /** 15 
     16     if实现选择结构:
     17     1. 单分支的选择结构: 如果..就
     18     // 判断提条件的结果只能是true or false
     19     if(判断条件) {
     20       //语句体
     21     }
     22     判断条件是由一个 关系表达式 来表示的
     23 
     24     2. 双分支:如果..就。。,否则。。。
     25     if (判断条件) {
     26 
     27     } else {
     28 
     29     }
     30 
     31     3. 多分支(各个分支,平行,互斥)
     32     if(判断条件1) {
     33         条件1语句体
     34      } else if (条件2) {
     35         条件2语句体
     36      }
     37      ...
     38      else if (条件n) {
     39 
     40      } else {
     41        // 第n + 1种情况
     42       //当else前都不满足条件的时候,就会执行else中的语句体
     43      }
     44 
     45      在绝大部分场景下,三目运算符和if双分支选择结构,都可以相互替代,
     46      但是,如果选择结构执行的仅仅只是一个操作,没有返回值,此时if双分支选择结构不可以和三目运算相互替代
     47  */
     48 public class Deomo1Select {
     49 
     50   public static void main(String[] args) {
     51 
     52     Scanner scanner = new Scanner(System.in);
     53 
     54     int input = scanner.nextInt();
     55 
     56     //单分支的if 当用户输入的是正数就输出一下,否则什么都不做
     57     //if (input > 0) {
     58     //  //如果是正数
     59     //  System.out.println("亲, 您输入了一个整数" + input);
     60     //}
     61 
     62 
     63     //双分支  当用户输入正数的时候输出一下用户输入的正数,当用户输入了非正数提示一下,请用户输入正数
     64     //if (input > 0) {
     65     //  //如果输入的是正数
     66     //  System.out.println("亲, 您输入了一个整数" + input);
     67     //} else {
     68     //  System.out.println("亲,请重新输入一个正数");
     69     //}
     70 
     71     //多分支 当用户输入正数,0,负数
     72     //if (input > 0) {
     73     //  //正数
     74     //  System.out.println("亲, 您输入了一个整数" + input);
     75     //} else if (input == 0) {
     76     //  //0
     77     //  System.out.println("亲, 您输入了一个0");
     78     //} else {
     79     //  //负数
     80     //  System.out.println("亲,请重新输入一个数字");
     81     //}
     82 
     83     //关于双分支的if选择结构
     84     // 实现两数取大
     85     int a = 3;
     86     int b = 10;
     87     int max;
     88     if (a > b) {
     89       max = a;
     90     } else {
     91       max = b;
     92     }
     93 
     94     //可以用三目运算符来实现两数取大
     95     max = a > b ? a : b;
     96 
     97     //我们发现3目运算符的语义和if双支选择结构,语义几乎完全相同,
     98     // 都是非此即彼,但是至少有一种情况,它们不能相互替代
     99     if (a > b) {
    100       System.out.println("大者是" + a);
    101     } else {
    102       System.out.println("大者是" + b);
    103     }
    104 
    105     //三目运算符的结果一定是一个值
    106     //a > b ? System.out.println("大者是" + a) : System.out.println("大者是" + b);
    107 
    108 
    109   }
    110 
    111 }

    练习:

    • 键盘录入x的值,计算出y的并输出。
    • 键盘录入月份的值,输出对应的季节。获取三个数据中的最大值
     1 package com.controlflow.select;
     2 
     3 import java.util.Scanner;
     4 
     5 /** 9  * 练习:
    10     1.键盘录入x的值,计算出y的并输出。
    11     x和y的关系满足如下:
    12     x>=3       y = 2x + 1;
    13     -1<=x<3      y = 2x;
    14     x<=-1      y = 2x – 1;
    15 
    16     2.键盘录入月份的值,输出对应的季节。
    17       12 1 2 冬季
    18       3  4 5 春季
    19       6 7 8  夏季
    20       9 10 11 秋季
    21     3.获取三个数据中的最大值
    22  */
    23 public class ExerciseIf {
    24 
    25   public static void main(String[] args) {
    26     //1.键盘录入x的值,计算出y的并输出。
    27     //Scanner scanner = new Scanner(System.in);
    28     //int x = scanner.nextInt();
    29     //int y;
    30     //if ( x >= 3) {
    31     //  y = 2 * x + 1;
    32     //} else if (x >= -1 && x < 3) {
    33     //  y = 2 * x;
    34     //} else {
    35     //  // x <= -1
    36     //  y = 2 * x - 1;
    37     //}
    38     //System.out.println("x = " + x + "---- y = " + y);
    39 
    40 
    41     //2.键盘录入月份的值,输出对应的季节。
    42     //if (x == 12 || x == 1 || x == 2) {
    43     //  //冬季
    44     //  System.out.println("冬季");
    45     //} else if ( x >= 3 && x <= 5) {
    46     //  //春季
    47     //  System.out.println("春季");
    48     //} else if ( x >= 6 && x <= 8 ) {
    49     //  //夏季
    50     //  System.out.println("夏季");
    51     //} else if ( x >= 9 && x <= 11) {
    52     //  //秋季
    53     //  System.out.println("秋季");
    54     //} else {
    55     //  //应对用户错误的输入
    56     //  System.out.println("亲,您输入了错误的月份");
    57     //}
    58 
    59     //3.获取三个数据中的最大值
    60     int a = 10;
    61     int b = 20;
    62     int c = 15;
    63 
    64     //if的嵌套来实现
    65     //if (a > b) {
    66     //  // a大
    67     //  if(a > c) {
    68     //    // a 最大
    69     //    System.out.println("最大值是: " + a);
    70     //  } else {
    71     //    // c最大
    72     //    System.out.println("最大值是 " + c);
    73     //  }
    74     //} else {
    75     //  // b大
    76     //  if (b > c) {
    77     //    System.out.println("最大值是: " + b);
    78     //  } else {
    79     //    System.out.println("最大值是: " + c);
    80     //  }
    81     //}
    82 
    83     //非嵌套方式
    84     int tmp;
    85     if ( a > b) {
    86       tmp = a;
    87     } else {
    88       tmp = b;
    89     }
    90 
    91     if (tmp > c) {
    92       System.out.println(tmp);
    93     } else {
    94       System.out.println(c);
    95     }
    96 
    97   }
    98 
    99 }

    switch语句格式:

    switch(表达式) {

    case 值1:

    语句体1;

    break;

    case 值2:

    语句体2;

    break;

    default:

    语句体n+1;

    break;

    }

     

    格式解释:

    • switch关键字:表示这是一个switch语句
    • switch后的表达式:表示选择条件
    • case语句:每个case 语句表示一个分支
    • beak语句:表示结束switch语句
    • default语句:表示当所有其他的case的分支,都不能匹配
    • switch后表达式的值的时候,此时就会执行default分支。

    注意事项:

    • switch语句后,表达式结果的取值范围?
    • case 后的常量取值?
    • break可以省略吗?
    • default可以省略吗?
    • switch语句的结束条件
     1 package com.controlflow.select;
     2 
     3 import java.util.Scanner;
     4 
     5 /** 8  *
     9  * switch语句格式: switch(表达式) { case 值1: //这个值,代表的一个特定分支 语句体1; //满足条件的分支执行的语句体 break; case 值2: 语句体2;
    10  * break; … default: 语句体n+1; break; }
    11  *
    12  * 格式解释: switch关键字:表示这是一个switch语句 switch后的表达式:表示选择条件 表达式
    13  *
    14  * case语句:每个case 语句表示一个分支  类比于if所表示的一个分支 beak语句:表示结束 switch语句 default语句:表示当所有其他的case的分支,都不能匹配switch后表达式的值的时候,
    15  * 此时就会执行default分支。 有点类似于 if-else多分支中最后的else
    16  *
    17  * 注意事项:
    18  * 1. switch 表达式的结果类型 表达式的取值:byte, short, int, char JDK7以后可以是:String 字符串
    19  * 2. case 后的常量取值?case后面的值,不能相同,值必须得是常量值,必须和表达式值的类型相同
    20  *
    21  * 3. break可以省略吗?语法上可以省略,省略之后,switch实现的就不再是我们所期望的多分支选择结构了,会发生一个现象case穿越
    22  *    所谓的case穿越是指:当匹配到switch语句的某个分支,当该分支中不包含break语句,swtich语句不会自动结束,
    23  *                      紧接着执行,紧邻的下一个case的语句体,最终要么遇到别的分支中的break;结束,
    24  *                      要么匹配到最后一个case,结束switch语句
    25  * 4. default可以省略吗?
    26  *    语法上可以,一把建议不要省略,我们根据实际开发需要来决定
    27  *
    28  * 5. default分支,必须只能放在最后吗?
    29  * 语法上没有问题,default分支可以放在switch的任意位置,注意default分支,
    30  * 如果不在最后,如果不加break,仍然会发生case穿越现象
    31  *
    32  * 6.switch语句的结束条件
    33  */
    34 public class Demo2Switch {
    35 
    36   public static void main(String[] args) {
    37 
    38     Scanner sc = new Scanner(System.in);
    39 
    40     int i = sc.nextInt();
    41 
    42     switch (i) {
    43 
    44       default:
    45         System.out.println("您输入了非 0,1,2的值");
    46       case 0:
    47         System.out.println("您输入了0");
    48         break;
    49       case 1:
    50         System.out.println("您输入了1");
    51         break;
    52       case 2:
    53         System.out.println("您输入了2");
    54         break;
    55 
    56 
    57     }
    58 
    59   }
    60 
    61 
    62 }

    练习:

    • 模拟做单项选择题,根据你的选择,给出对应的答案。(表达式是字符的情况)
    • 键盘录入字符串,根据给定的字符串,来输出你选择的字符串是什么?(表达式是字符串的情况)
    • 用switch语句实现键盘录入月份,输出对应的季节 看程序写结果
      1 package com.controlflow.select;
      2 
      3 import java.util.Scanner;
      4 
      5 /**  8  *
      9  * 1.模拟做单项选择题,根据你的选择,给出对应的答案。(表达式是字符的情况) 2.键盘录入字符串,根据给定的字符串,来输出你选择的字符串是什么?(表达式是字符串的情况)
     10  * 3.用switch语句实现键盘录入月份,输出对应的季节 4.看程序写结果
     11  */
     12 public class ExerciseSwitch {
     13 
     14   public static void main(String[] args) {
     15 
     16     //1.模拟做单项选择题,根据你的选择,给出对应的答案。
     17     //System.out.println("你的女神是?");
     18     //System.out.println("A.高圆圆");
     19     //System.out.println("B.云姐");
     20     //System.out.println("C.沈佳宜");
     21     //System.out.println("D.石原里美");
     22 
     23     Scanner sc = new Scanner(System.in);
     24     //String s = sc.nextLine();
     25     //char c = s.charAt(0);
     26     //
     27     //switch (c) {
     28     //  case 'A' :
     29     //    System.out.println("您的女神是:高圆圆");
     30     //    break;
     31     //  case 'B' :
     32     //    System.out.println("您的女神是:云姐");
     33     //    break;
     34     //  case 'C' :
     35     //    System.out.println("您的女神是:沈佳宜");
     36     //    break;
     37     //  case 'D' :
     38     //    System.out.println("您的女神是:石原里美");
     39     //    break;
     40     //}
     41 
     42     //2.键盘录入字符串,根据给定的字符串,来输出你选择的字符串是什么?(表达式是字符串的情况)
     43 
     44     //switch (s) {
     45     //  case "A" :
     46     //    System.out.println("您的女神是:高圆圆");
     47     //    break;
     48     //  case "B" :
     49     //    System.out.println("您的女神是:云姐");
     50     //    break;
     51     //  case "C" :
     52     //    System.out.println("您的女神是:沈佳宜");
     53     //    break;
     54     //  case "D" :
     55     //    System.out.println("您的女神是:石原里美");
     56     //    break;
     57     //}
     58 
     59     //3.用switch语句实现键盘录入月份,输出对应的季节 合理利用case穿越
     60     //int month = sc.nextInt();
     61     //switch (month) {
     62     //  case 12:
     63     //  case 1:
     64     //  case 2:
     65     //    System.out.println("冬季");
     66     //    break;
     67     //  case 3:
     68     //  case 4:
     69     //  case 5:
     70     //    System.out.println("春季");
     71     //    break;
     72     //  case 6:
     73     //  case 7:
     74     //  case 8:
     75     //    System.out.println("夏季");
     76     //    break;
     77     //  case 9:
     78     //  case 10:
     79     //  case 11:
     80     //    System.out.println("秋季");
     81     //    break;
     82     //  default:
     83     //    System.out.println("您输入了错误的月份");
     84     //}
     85 
     86     //4. 看代码,写结果
     87 /*    int x = 2;
     88     int y = 3;
     89     switch(x){
     90       default:
     91         y++;
     92         break;
     93       case 3:
     94         y++;
     95       case 4:
     96         y++;
     97     }
     98     System.out.println("y="+y);*/
     99 
    100 
    101     int x = 2;
    102     int y = 3;
    103     switch(x){
    104       default:
    105         y++;
    106       case 3:
    107         y++;
    108       case 4:
    109         y++;
    110     }
    111     System.out.println("y="+y);
    112 
    113 
    114   }
    115 
    116 }

      选择结构有两种实现方式,这两种实现方式,各自适用于什么样的使用场景呢?

    if的使用场景

    • 针对结果是boolean类型的判断
    • 分支对应多个表达式的多个取值

    switch的使用场景

    • 针对结果是固定类型的判断
    • 表达式的取值范围只是固定的离散值集合,分支对应表达式的某一种取值
     1 public class compare {
     2 
     3   public static void main(String[] args) {
     4 
     5     //分支对应多个表达式的多个取值
     6     int x = 0;
     7     int y = 100;
     8 
     9     if (x > 0) {
    10       // x > 0
    11     } else if (y < 10) {
    12       //  0=< y < 10 不对哈这里是我写错了哈
    13       // 应该是  x <=0 && y < 10哈,讲课的时候主要想着区别,疏忽了具体代码哈
    14     }
    15 
    16     switch (x) {
    17       case 0: //一个值对应一个分支
    18       break;
    19 
    20     }
    21 
    22 
    23   }
    24 
    25 }

    3.循环结构

    在学习循环结构之前,我们首先来简单回顾顺序结构,选择结构中,Java语句的执行特点。

    与顺序结构和选择结构不同,循环结构的主要功能是控制Java语句能够重复执行。

    如何控制呢?

    循环结构,从语法上来讲,有3种实现形式:

      • for语句
      • while语句
      • do while语句

    但是,不管哪种实现形式,都由4部分组成:

      • 初始化语句
      • 条件判断语句
      • 循环体语句
      • 循环控制语句

      接下来我们首先来分析下,循环结构如何通过,这4个组成部分,完成控制Java语句重复执行的功能。

     for 循环语句:

    for(初始化语句;判断条件语句;控制条件语句) {

      循环体语句;

    }

    执行流程:

    注意事项:

    • 判断条件语句的结果的数据类型
    • 循环体语句
     1 public class Demo1 {
     2 
     3   public static void main(String[] args) {
     4 
     5     int j;
     6     //hello 你好 输出10次
     7     //1.设定一个计数值:记录你喊了多少次 hello 你好, 而且该计数值的初值为0(初始化语句)
     8     //2. 开始重复喊 hello 你好(循环体语句), 每喊一次 计数值会 + 1(循环体语句,改变循环变量,循环变量就是指喊的次数)
     9     //3. 喊hello 你好的计数值(喊的次数) 和 10 比较一下,当 计数值 > 10 结束(结束条件判断)
    10     System.out.println("hello 你好");
    11     System.out.println("hello 你好");
    12     System.out.println("hello 你好");
    13     System.out.println("hello 你好");
    14     System.out.println("hello 你好");
    15     System.out.println("hello 你好");
    16     System.out.println("hello 你好");
    17     System.out.println("hello 你好");
    18     System.out.println("hello 你好");
    19     System.out.println("hello 你好");
    20 
    21     // for 循环实现
    22     //for(初始化语句;判断条件语句;控制条件语句) {
    23     //  循环体语句;
    24     //}
    25     for(int i = 1; i <= 10; ++i) {
    26       System.out.println("hello 你好 --- " + i);
    27     }
    28 
    29 
    30     //在for循环中定义了变量i,它的作用域,仅仅只在for循环中
    31     //System.out.println(i);
    32 
    33   }
    34 
    35 }

    练习:

    • 请在控制台输出数据1-10
    • 请在控制台输出数据10-1
    • 求出1-10之间数据之和
    • 求出1-100之间偶数和
    • 求5的阶乘 在控制台输出所有的”水仙花数”,统计”水仙花数”共有多少个
     1 public class Exercise {
     2 
     3   public static void main(String[] args) {
     4     //请在控制台输出数据1-10   第一个数1  最后一个数10
     5     for (int i = 1; i <= 10 ; i++) {
     6       // print 和 println 的区别仅仅在于:println输出之后自动换行
     7       //System.out.print(i + " ");
     8     }
     9 
    10     //请在控制台输出数据10-1   第一个数10  最后一个数1
    11     for (int i = 10; i >= 1 ; --i) {
    12       //System.out.print(i + " ");
    13     }
    14 
    15     //求出1-10之间数据之和
    16     // 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10
    17     // (1 + 2) + 3 +...
    18     //  (((1 + 2) + 3) + 4) + 5
    19     // (((0 + 1) + 2) + 3 + ... )+10
    20 
    21     //初始和(累和变量)
    22     int acc = 0;
    23     for (int i = 1; i <= 10; i++) {
    24        acc += i;
    25     }
    26     //System.out.println(acc);
    27 
    28     //求出1-100之间偶数和
    29     acc = 0;
    30     for (int i = 1; i <= 100 ; i++) {
    31       if(i % 2 == 0) {
    32         //是偶数
    33         acc += i;
    34       }
    35     }
    36    // System.out.println(acc);
    37 
    38     //求5的阶乘
    39     // 1 5 * 4 * 3 * 2 * 1
    40     int multi = 1; //累积变量,初值为1
    41     for (int i = 5; i >= 1 ; i--) {
    42       multi *= i;
    43     }
    44    // System.out.println(multi);
    45 
    46     //在控制台输出所有的”水仙花数”
    47     // 1. 这样一个三位数[100 999]: 各位上的数字的立方和的值等于该数字本身
    48     int count = 0;
    49     for (int i = 100; i < 1000; i++) {
    50       //判断一个数字i,是否是水仙花数
    51 
    52       //数位拆解得到各位的数字
    53       //个位数字
    54       int m = i % 10;
    55       //十位数字
    56       int n = i / 10 % 10;
    57       //百位数字
    58       int b = i / 100;
    59 
    60       if (m * m * m + n * n * n + b * b * b == i) {
    61         //是水仙花数
    62         //System.out.println(i);
    63         count++;
    64       }
    65     }
    66     System.out.println(count);
    67 
    68 
    69 
    70   }
    71 
    72 }

    while循环语句格式:

       初始化语句;

       while (条件判断语句) {

        循环体语句;

       }

    执行流程: 

      和for循环一模一样

    • for循环和while循环的联系

    for循环和while循环几乎可以在任何场景下,作等价替换

    • for循环和while循环的区别

    直观来说,for循环适合针对一个范围判断进行操作(循环次 数比较明确),for循环适合针对一个范围判断进行操作 (循环次数比较明确)

     1 public class WhileDemo {
     2 
     3   public static void main(String[] args) {
     4 
     5     // 我国最高山峰是珠穆朗玛峰:8848m,我现在有一张足够大的纸张,厚度为:0.01m。
     6     // 请问,我折叠多少次,就可以保证厚度不低于珠穆朗玛峰的高度?
     7 
     8     //初始化语句 纸张的初始化高度
     9     double height = 0.01;
    10     int count = 0;
    11     while (height < 8848) {
    12       height *= 2;
    13       count++;
    14     }
    15     System.out.println("次数是:" + count + "---- height " + height);
    16 
    17 
    18   }
    19 
    20 }

    do …while循环语句格式

    初始化语句;

    do {

      循环体语句;

    } while (条件判断)

    执行流程: do while 循环结构与while循环结构比,略有不同

    1. 执行初始化语句
    2. 不管是否满足循环条件,都首先执行一次循环体中的代码
    3. 之后的执行流程就和for while

    public class DoWhileDemo {
    
      public static void main(String[] args) {
    
        //先执行循环体,在判断
        int i = 10;
        do {
          System.out.println(i);
          i++;
        } while (i > 11);
    
        //对比while循环,先判断在执行循环体
        i = 10;
        while ( i > 11) {
          System.out.println(i);
          i++;
        }
    
    
      }
    
    }

    3种循环结构的综合比较:

    3种循环中,for循环和while循环等价

    do … while循环与其他两种循环结构相比,略有不同,因为do…while结构可保证循环体至少执行一次

    注意事项:

    1. 实际使用时,只要达到预期的效果,用哪个都可以
    2. 如非特殊情况,要注意不要规避死循环问题,如: for(;;) 或 while(true),
    3. 死循环并非不能使用(学习多线程时解释)
    public class Compare {
    
      public static void main(String[] args) {
    
        for (;;){
          System.out.println("你好 dead loop");
        }
    
        //while(true)
    
      }
    
    }
    • 请输出一个4行5列的星星(*)图案。
    • 请输出如下图形
    • *
    • **
    • ***
    • ****
    • *****
    • 在控制台输出九九乘法表。
     1 package com.controlflow.recycle;
     2 
     3 /**
     4  *
     5  *  1.请输出一个4行5列的星星(*)图案。
     6  *    *****
     7  *    *****
     8  *    *****
     9  *    *****
    10     2.请输出如下图形
    11      *
    12      **
    13      ***
    14      ****
    15      *****
    16     3.在控制台输出九九乘法表。
    17 
    18  */
    19 public class Exercise {
    20 
    21   public static void main(String[] args) {
    22     //1.请输出一个4行5列的星星(*)图案。
    23     //重复输出5行*
    24     //for(int i = 0; i < 4; i++) {
    25     //
    26     //  //重复输出每一行的*
    27     //  for (int j = 0; j < 5; j++) {
    28     //    System.out.print("*");
    29     //  }
    30     //  //换行输出下一行
    31     //  System.out.println();
    32     //}
    33     //
    34     ////输出三角形的*
    35     //for (int i = 1; i <= 5; i++) {
    36     //
    37     //  //控制输出每一行的*
    38     //  for (int j = 1; j <= i; j++) {
    39     //    System.out.print("*");
    40     //  }
    41     //  System.out.println();
    42     //}
    43 
    44     //在控制台输出9x9乘法表
    45     // 1*1=1
    46     // 1*2=2  2*2=4
    47     // 1*3=3  2*3=6  3*3=9
    48 
    49     for (int i = 1; i <= 9 ; i++) {
    50 
    51       //控制每一行输出的表达式
    52       for (int j = 1; j <= i ; j++) {
    53         //内存循环中的每一次执行,输出的是一个表达式
    54         System.out.print(j + "x" + i + "=" + j * i + "  ");
    55       }
    56       //换行
    57       System.out.println();
    58 
    59     }
    60   }
    61 
    62 }

    补充:

     1 package com.controlflow.recycle;
     2 
     3 /**
     4  *
     5  * 有一种循环的写法, 针对数组的遍历: Colletcion
     6  * for(数据类型 变量名(标识符) : 数组名) {
     7  *
     8  * }
     9  *
    10  */
    11 public class Supplement {
    12 
    13   public static void main(String[] args) {
    14     // 定义一个数组
    15     int[] array = {1, 2, 3, 4};
    16 
    17     //普通遍历
    18     for (int i = 0; i < 4; i++) {
    19       System.out.println(array[i]);
    20     }
    21 
    22     // 增强形式for循环
    23     //
    24     // 1, 2, 3, 4
    25     for (int element : array) {
    26       System.out.println(element);
    27     }
    28 
    29   }
    30 
    31 }

    4.跳转控制语句

      通过学习循环控制语句,我们已经可以完成控制循环体中的Java代码,重复执行。

      但是,循环结构的控制粒度是整个循环语句体,我们可不可以对循环体中的循环体语句,作更加精细的控制呢? 比如,自己控制循环的结束等。

      为了实现对循环结构更加细粒度的控制,我们得通过跳转控制

      • break 中断
      • continue 继续
      • return 返回
    • break的使用场景:
    1. 在选择结构的switch语句中
    2. 在循环语句中(离开使用场景的存在是没有意义的)
    • break的作用:

    跳出(终止)单层循环(如果有多层循环,只跳出内层)

    结束switch语句

    • 带标签的跳出(多重循环)

    格式:标签名: 循环语句

    标签名要符合Java的命名规则

     1 public class BreakDemo {
     2 
     3   public static void main(String[] args) {
     4 
     5     //break的基本功能,结束单重循环
     6     //for (int i = 1; i <= 10; i++) {
     7     //  // 输出到5
     8     //  System.out.println(i);
     9     //  if(i == 5) {
    10     //    break;
    11     //  }
    12     //}
    13 
    14     //离开使用场景的break
    15     //for (int i = 0; i < 10; i++) {
    16     //  System.out.println(i);
    17     //  break;
    18     //}
    19 
    20     for (int i = 0; i < 3; i++) {
    21 
    22       for (int j = 0; j < 3; j++) {
    23         if( j == 2) {
    24           break;
    25         }
    26         System.out.println("i = " + i + " -- " + "j = " + j);
    27       }
    28     }
    29     System.out.println("---------------------------------------");
    30     // 终止外层循环
    31     outer: //给外层循环定义了个标签(标识符)
    32     for (int i = 0; i < 3; i++) {
    33       for (int j = 0; j < 3; j++) {
    34         if( j == 2) {
    35           break outer;
    36         }
    37         System.out.println("i = " + i + " -- " + "j = " + j);
    38       }
    39     }
    40   }
    41 
    42 }
    • continue的使用场景:
    1. 在循环语句中
    2. 离开使用场景的存在是没有意义的,必须和if连用
    • continue的作用:

    退出循环的一次迭代过程

    也可以使用标签

     1 public class ContinueDemo {
     2 
     3   public static void main(String[] args) {
     4 
     5     for (int i = 1; i <= 10; i++) {
     6       if(i == 5) {
     7         //终止,单重循环的一次循环过程
     8         continue;
     9       }
    10       System.out.println(i);
    11     }
    12 
    13     //for (int i = 1; i <= 10; i++) {
    14     //  //continue 必须和if配合使用
    15     //  continue;
    16     //  System.out.println(i);
    17     //}
    18 
    19     //i = 0 -- j = 0
    20     //i = 0 -- j = 2
    21     //i = 1 -- j = 0
    22     //i = 1 -- j = 2
    23     //i = 2 -- j = 0
    24     //i = 2 -- j = 2
    25 
    26     //i = 0 -- j = 0
    27     //i = 1 -- j = 0
    28     //i = 2 -- j = 0
    29 
    30     outer:
    31     for (int i = 0; i < 3; i++) {
    32 
    33       for (int j = 0; j < 3; j++) {
    34         if( j == 1) {
    35           continue outer;
    36           //break;
    37         }
    38         System.out.println("i = " + i + " -- " + "j = " + j);
    39       }
    40 
    41     }
    42 
    43 
    44   }
    45 
    46 }

      return关键字不是为了跳转出循环体 ,更常用的功能是结束一个方法(函数),也就是退出一个方法。 跳转到上层调用的方法。这个在方法的使用那里会在详细的讲解。

    演示案例: 结束循环其实是结束了main方法

     1 public class ReturnDemo {
     2 
     3   public static void main(String[] args) {
     4 
     5     //return 终止单重循环
     6     //for (int i = 1; i <= 10; i++) {
     7     //  System.out.println(i);
     8     //  if(i == 5) {
     9     //    return;
    10     //  }
    11     //}
    12 
    13    //return 终止多重循环
    14     for (int i = 0; i < 3; i++) {
    15       for (int j = 0; j < 3; j++) {
    16         if( j == 2) {
    17           return;
    18         }
    19         System.out.println("i = " + i + " -- " + "j = " + j);
    20       }
    21     }
    22 
    23     System.out.println(" hello return");
    24   }
    25 
    26 }
  • 相关阅读:
    状压DP入门
    二分图匹配(最大匹配:匈牙利算法)
    序列自动机入门
    Trie树入门+例题(字典树,前缀树)
    扩展KMP算法(Z-Algorithm)
    Oracle锁表查询和解锁方法
    oracle获取系统日期--当前时间+前一天+当前月+前一个月
    oracle获取年月日,两个日期相减
    oracle decode函数和 sign函数
    expdp、impdp数据泵导出导入数据
  • 原文地址:https://www.cnblogs.com/dust2017/p/12676581.html
Copyright © 2011-2022 走看看