200-Java语言基础-Java编程入门-004 | Java分支与循环

一、流程控制语句
可以控制程序的执行流程
在程序开发的过程之中一共会存在有三种程序逻辑:顺序结构、条件分支(选择)结构、循环结构。
顺序结构的定义,即:所有的程序将按照定义的代码从上往下、顺序依次执行。
二、条件分支(选择)结构
    对于条件分支(选择)语句主要有两类使用形式,if语句、switch语句
  • IF分支结构语句
    if分支结构主要是针对于关系表达式进行判断处理的分支操作。
    if语句格式1
 1 // if语句格式1
 2 if (比较表达式) {
 3     语句体;
 4 }
 5  
 6 public class JavaDemo {
 7   public static void main(String[] args) {
 8     /*
 9      * D:执行流程:
10            * 先计算比较表达式的值,看其返回值是true还是false。
11            * 如果是true,就执行语句体;
12            * 如果是false,就不执行语句体;
13      */
14     int age = 19;
15     if (age >= 18) {
16       System.out.println("可以浏览本网站");
17     }
18     System.out.println("sorry");
19   }
20 }
21     /*
22      * if语句注意事项
23      * a:比较表达式无论简单还是复杂,结果必须是boolean类型
24      * b:if语句控制的语句体如果是一条语句,大括号可以省略;
25      * 如果是多条语句,就不能省略。建议永远不要省略。
26      * c:一般来说:有左大括号就没有分号,有分号就没有左大括号
27      */
    if语句格式2
 1 public class JavaDemo {
 2   public static void main(String[] args) {
 3     /*
 4     *  A:if语句的格式2
 5     *
 6       if(比较表达式) {
 7          语句体1;
 8       }else {
 9          语句体2;
10       }
11     * B:执行流程:
12       * 首先计算比较表达式的值,看其返回值是true还是false。
13       * 如果是true,就执行语句体1;
14       * 如果是false,就执行语句体2;
15     * C:案例演示
16       * a:获取两个数据中较大的值
17       * b:判断一个数据是奇数还是偶数,并输出是奇数还是偶数
18     
19       * 注意事项:else后面是没有比较表达式的,只有if后面有。
20      */
21     
22     int x = 1;
23     if (x == 1) {
24       System.out.println("北京欢迎您");
25     } else {
26       System.out.println("哪来回哪儿去");
27     }
28     // 获取两个数据中较大的值
29     int a = 20;
30     int b = 13;
31     int max;
32     if (a > b) {
33       max = a;
34     } else {
35       max = b;
36     }
37     System.out.println("max = " + max);
38     
39     // 判断一个数据是奇数还是偶数,并输出是奇数还是偶数
40     int num = 666;
41     if (num % 2 == 0) {
42       System.out.println(num + "是一个偶数");
43     } else {
44       System.out.println(num + "是一个奇数");
45     }
46   }
47 }
    if语句的格式2和三元的相互转换问题
 1 public class JavaDemo {
 2   public static void main(String[] args) {
 3     /*
 4     * A:案例演示
 5     * if语句和三元运算符完成同一个效果
 6     * B:案例演示
 7     * if语句和三元运算符的区别
 8   
 9     * 三元运算符实现的,都可以采用if语句实现。反之不成立。
10     
11     * 什么时候if语句实现不能用三元改进呢?
12     * 当if语句控制的操作是一个输出语句的时候就不能。
13     * 为什么呢?因为三元运算符是一个运算符,运算符操作完毕就应该有一个结果,而不是一个输出。
14      */
15     
16     // 获取两个数据中较大的值
17     int a = 20;
18     int b = 13;
19     int max;
20     if (a > b) {
21       max = a;
22     } else {
23       max = b;
24     }
25     System.out.println("max = " + max);
26     
27     int x = 111;
28     int y = 557;
29     int max1 = (x > y) ? x : y;
30     System.out.println("max = " + max1);
31   }
32 }
    if语句格式3
 1 public class JavaDemo {
 2   public static void main(String[] args) {
 3     /*
 4     * A:if语句的格式3:
 5     *
 6         if(比较表达式1) {
 7            语句体1;
 8         }else if(比较表达式2) {
 9            语句体2;
10         }else if(比较表达式3) {
11            语句体3;
12         }
13         ...
14         else {
15            语句体n+1;
16         }
17     * B:执行流程:
18       * 首先计算比较表达式1看其返回值是true还是false,
19       * 如果是true,就执行语句体1,if语句结束。
20       * 如果是false,接着计算比较表达式2看其返回值是true还是false,
21       
22       * 如果是true,就执行语句体2,if语句结束。
23       * 如果是false,接着计算比较表达式3看其返回值是true还是false,
24       
25       * 如果都是false,就执行语句体n+1。
26     * C:注意事项:最后一个else可以省略,但是建议不要省略,可以对范围外的错误值提示
27      */
28     int x = 1;
29     if (x == 1) {
30       System.out.println("北京欢迎您");
31     } else if (x == 0) {
32       System.out.println("上海欢迎您");
33     } else {
34       System.out.println("无法识别");
35     }
36   }
37 }
  • switch分支语句
 1 public class JavaDemo {
 2   public static void main(String[] args) {
 3     /*
 4     * A:switch语句的格式
 5     *
 6     switch(表达式) {   // 基本数据类型可以接收byte、short、char、int
 7         case 值1:     // 引用数据类型可以接收枚举(JDK1.5)、String字符串(JDK1.7)
 8             语句体1;
 9             break;
10         case 值2:
11             语句体2;
12             break;
13 14         default:  
15             语句体n+1;
16             break;
17       }
18     * B:switch语句的格式解释
19     * C:面试题
20       * byte可以作为switch的表达式吗?可以
21       * long可以作为switch的表达式吗?不可以
22       * String可以作为switch的表达式吗?可以
23     * C:执行流程
24       * 先计算表达式的值
25       * 然后和case后面的匹配,如果有就执行对应的语句,否则执行default控制的语句
26      */
27     String name = "张三";
28     String gender = "男性";
29     switch (gender) {
30     case "男性":
31       System.out.println(name + "是一位" + gender + "喜欢吃饭睡觉码代码");
32       break;
33     case "女性":
34       System.out.println(name + "是一位" + gender + "喜欢逛街购物美容");
35       break;
36     default:
37       System.out.println(name + "是一位" + gender + "啥也不是");
38       break;
39     }
40   }
41 }
    选择结构switch语句的注意事项:
  • case后面只能是常量,不能是变量,而且,多个case后面的值不能出现相同的
  • default可以省略吗?
    • 可以省略,但是不建议,因为它的作用是对不正确的情况给出提示。
  • break可以省略吗?
    • 最后一个可以省略,其他最好不要省略
    • 会出现一个现象:case穿透。
    • 最终我们建议不要省略
  • default一定要在最后吗?
    • 不是,可以在任意位置。但是建议在最后。
  • switch语句的结束条件
    • 遇到break就结束了
    • 执行到switch的右大括号就结束了
 
三、选择结构if语句和switch语句的区别
    总结switch语句和if语句的各自使用场景:
  • switch建议判断固定值的时候用
  • if建议判断区间或范围的时候用
 1 public class JavaDemo {
 2   public static void main(String[] args) {
 3     /*
 4      * 一年有四季
 5      */
 6     Scanner sc =  new Scanner(System.in);
 7     System.out.println("请输入正确的月份");
 8     int month = sc.nextInt();
 9     switch (month) {
10     case 3:
11     case 4:
12     case 5:
13       System.out.println("春季");
14       break;
15     case 6:
16     case 7:
17     case 8:
18       System.out.println("夏季");
19       break;
20     case 9:
21     case 10:
22     case 11:
23       System.out.println("秋季");
24       break;
25     case 12:
26     case 1:
27     case 2:
28       System.out.println("冬季");
29       break;
30     default:
31       System.out.println("输入错误");
32       break;
33     }
34     
35     // 用if语句来完成
36     if (month >= 1 && month <= 12) {
37       if (month >= 3 && month <= 5) {
38         System.out.println("春季");
39       } else if (month >= 6 && month <= 8) {
40         System.out.println("夏季");
41       } else if (month >= 9 && month <= 10) {
42         System.out.println("秋季");
43       } else {
44         System.out.println("冬季");
45       }
46     } else {
47       System.out.println("输入错误");
48     }
49     
50   }
51 }
三、循环结构语句
  • for循环结构
 1 public class JavaDemo {
 2   public static void main(String[] args) {
 3     /*
 4      * 循环结构for语句的格式:
 5      *
 6     for(初始化表达式; 条件表达式; 循环后的操作表达式) {
 7            循环体;
 8     }
 9      * C执行流程:
10        * a:执行初始化语句
11        * b:执行判断条件语句,看其返回值是true还是false
12            * 如果是true,就继续执行
13            * 如果是false,就结束循环
14        * c:执行循环体语句;
15        * d:执行循环后的操作表达式
16        * e:回到B继续。
17      * D:案例演示
18        * 在控制台输出10次"helloworld"
19      */
20     for (int i = 0; i < 11; i++) {
21       System.out.println("Hello World!");
22     }
23   }
24 }
25  
26 public class JavaDemo {
27   public static void main(String[] args) {
28     /*
29      * A:案例演示
30        * 需求:请在控制台输出数据1-10
31        * 需求:请在控制台输出数据10-1
32      * B:注意事项
33        * a:判断条件语句无论简单还是复杂结果是boolean类型。
34        * b:循环体语句如果是一条语句,大括号可以省略;如果是多条语句,大括号不能省略。建议永远不要省略。
35        * c:一般来说:有左大括号就没有分号,有分号就没有左大括号
36      */
37     
38     // 请在控制台输出数据1-10
39     for (int i = 1; i < 11; i++) {
40       System.out.println("i = " + i);
41     }
42     System.out.println("---------------");
43     // 请在控制台输出数据10-1
44     for (int i = 10; i > 0; i--) {
45       System.out.println("i = " + i);
46     }
47   }
48 }
    循环结构for语句的练习之求和思想
 1 public class JavaDemo {
 2   public static void main(String[] args) {
 3     /*
 4      * A:案例演示
 5        * 需求:求出1-10之间数据之和
 6      * B:学生练习
 7        * 需求:求出1-100之间偶数和
 8        * 需求:求出1-100之间奇数和
 9      */
10     
11     // 求出1-10之间数据之和
12     int sum = 0;
13     for (int i = 1; i < 11; i++) {
14       sum += i;
15     }
16     System.out.println("sum = " + sum);
17     System.out.println("---------------");
18     int sum1 = 0;
19     int sum2 = 0;
20     // 求出1-100之间偶数和
21     // 求出1-100之间奇数和
22     for (int i = 1; i < 101; i++) {
23       if (i % 2 == 0) {
24         sum1 += i;
25       } else {
26         sum2 += i;
27       }
28     }
29     System.out.println("奇数和 = " + sum1);
30     System.out.println("偶数和 = " + sum2);
31   }
32 }
    循环结构for语句的练习之水仙花
 1 public class JavaDemo {
 2   public static void main(String[] args) {
 3     /*
 4      * A:案例演示
 5        * 需求:在控制台输出所有的”水仙花数”
 6        * 所谓的水仙花数是指一个三位数,其各位数字的立方和等于该数本身。
 7        * 举例:153就是一个水仙花数。
 8        * 153 = 1*1*1 + 5*5*5 + 3*3*3 = 1 + 125 + 27 = 153
 9        * 分析:
10        *  100 ~ 999
11        *  获取每一个位数的值、百位、十位、个位
12        *  判断各位数的立方和等于该数本身
13      */
14     int num = 0;
15     for (int i = 100; i < 1000; i++) {       // 获取100 ~ 999 的数\
16       int ge = i % 10;                       // 123 %(模、取余) 10 = 3
17       int shi = i / 10 % 10;                 // 123 / 10 = 12(整除)   12 %  10 = 2
18       int bai = i / 10 / 10 % 10;            // 123 / 10 = 12(整除)   12 /  10 = 1   1 % 10 = 1
19       if ((ge * ge * ge) + (shi * shi * shi) + (bai * bai * bai) == i) {
20         num ++;                              // 计数器思想
21         System.out.println(i + "就是一个水仙花数");
22       }
23     }
24     System.out.println("水仙花数的个数为" + num);
25     
26   }
27 }
  • while循环结构
 1 public class JavaDemo {
 2   public static void main(String[] args) {
 3     /*
 4      * 循环结构while语句的格式:
 5      *     
 6       while循环的基本格式:
 7       while(判断条件语句) {
 8                  循环体语句;
 9       }
10          
11             完整格式:
12          
13             初始化语句
14       while(判断条件语句) {
15                 循环体语句;
16                 控制条件语句;
17       }
18      * B:执行流程:
19        * a:执行初始化语句
20        * b:执行判断条件语句,看其返回值是true还是false
21          * 如果是true,就继续执行
22          * 如果是false,就结束循环
23        * c:执行循环体语句;
24        * d:执行控制条件语句
25        * e:回到B继续。
26      * C:案例演示
27        * 需求:请在控制台输出数据1-10
28      */
29     int i = 0;
30     while (i < 11) {
31       i++;
32       System.out.println("i = " + i);
33     }
34     
35   }
36 }
    循环结构while语句的练习
 1 public class JavaDemo {
 2   public static void main(String[] args) {
 3     /*
 4      * A:求和思想
 5        * 求1-100之和
 6      * B:统计思想
 7        * 统计”水仙花数”共有多少个
 8      */
 9     // 求1-100之和
10     int i = 0;
11     int sum = 0;
12     while (i < 101) {
13       sum += i;
14       i++;
15     }
16     System.out.println("sum = " + sum);
17     
18     // 统计”水仙花数”共有多少个
19     int count = 0;
20     int j = 100;
21     while (j < 1000) {
22       int ge = j % 10;                 // 123 % 10 = 3
23       int shi = j / 10 % 10;           // 123 / 10 = 12   12 % 10 = 1
24       int bai = j / 10 / 10 % 10;      // 1 % 10 = 1
25       if ((ge * ge * ge) + (shi * shi * shi) + (bai * bai * bai) == j) {
26         count++;
27       }
28       j++;
29     }
30     System.out.println("水仙花的个数为: " + count);
31   }
32 }
  • do...while循环结构
 1 public class JavaDemo {
 2   public static void main(String[] args) {
 3     /*
 4      * A:循环结构do...while语句的格式:
 5      *
 6       do {
 7          循环体语句;
 8       }while(判断条件语句);
 9     
10       完整格式;
11       初始化语句;
12       do {
13          循环体语句;
14          控制条件语句;
15       }while(判断条件语句);
16      * B:执行流程:
17        * a:执行初始化语句
18        * b:执行循环体语句;
19        * c:执行控制条件语句
20        * d:执行判断条件语句,看其返回值是true还是false
21          * 如果是true,就继续执行
22          * 如果是false,就结束循环
23        * e:回到b继续。
24      * C:案例演示
25        * 需求:请在控制台输出数据1-10
26      */
27     // 请在控制台输出数据1-10
28     int i = 1;
29     do {
30       System.out.println("i = " + i);
31       i++;
32     } while (i < 11);
33   }
34 }
  • 循环结构三种循环语句的区别
    三种循环语句的区别:
    • do...while循环至少执行一次循环体。
    • 而for,while循环必须先判断条件是否成立,然后决定是否执行循环体语句。
    for循环和while循环的区别:
    • 如果你想在循环结束后,继续使用控制条件的那个变量,用while循环,否则用for循环。不知道用谁就用for循环。因为变量尽早的从内存中消失,可以提高内存的使用效率。
    
  • 循环结构注意事项之死循环
    • 一定要注意控制条件语句控制的那个变量的问题,不要弄丢了,否则就容易死循环。
    • 两种最简单的死循环格式:
      • while(true){...}
      • for(; ;){...}
 
四、循环结构语句循环嵌套
 1 public class JavaDemo {
 2   public static void main(String[] args) {
 3     /*
 4      * A:案例演示
 5        * 需求:请输出一个4行5列的星星(*)图案。
 6        *
 7            如图:
 8         *****
 9         *****
10         *****
11         *****
12         
13            注意:
14         System.out.println("*");和System.out.print("*");的区别
15      * B:结论:
16        * 外循环控制行数,内循环控制列数
17      */
18     for (int i = 1; i < 5; i++) {
19       for (int j = 1; j < 6; j++) {
20         System.out.print("*");
21       }
22       System.out.println();
23     }
24   }
25 }
26  
27 public class JavaDemo {
28   public static void main(String[] args) {
29     /*
30      * A:案例演示
31            需求:请输出下列的形状
32       *
33       **
34       ***
35       ****
36       *****
37      */
38     for (int i = 1; i < 6; i++) {
39       for (int j = 1; j <= i; j++) {
40         System.out.print("*");
41       }
42       System.out.println();
43     }
44   }
45 }
46  
47 public class JavaDemo {
48   public static void main(String[] args) {
49     /*
50      * A:案例演示
51        * 需求:在控制台输出九九乘法表。
52      * B:代码优化
53      *
54          注意:
55          '\x' x表示任意,\是转义符号,这种做法叫转移字符。
56     
57          '\t'  tab键的位置
58          '\r'  回车
59          '\n'  换行
60          '\"'
61          '\''
62      */
63     int sum = 0;
64     for (int i = 1; i <= 9; i++) {
65       for (int j = 1; j <= i; j++) {
66         sum = i * j;
67         System.out.print(j + "*" + i + "=" + sum + "\t");
68       }
69       System.out.println();
70     }
71   }
72 }
五、控制跳转语句break语句
    break的使用场景:
  • 只能在switch和循环中
 1 public class JavaDemo {
 2   public static void main(String[] args) {
 3     /*
 4      * A:break的使用场景
 5        * 只能在switch和循环中
 6      */
 7     for (int i = 0; i <= 10; i++) {
 8       if (i == 4) {
 9         break;         // 跳出循环
10       }
11       System.out.println("i =" + i);
12     }
13   }
14 }
六、控制跳转语句break语句
    continue的使用场景:
  • 能在循环中
 1 public class JavaDemo {
 2   public static void main(String[] args) {
 3     /*
 4      * A:continue的使用场景
 5        * 只能在循环中
 6      */
 7     for (int i = 0; i <= 10; i++) {
 8       if (i == 4) {
 9         continue;         // 终止本次循环,继续下次循环
10       }
11       System.out.println("i =" + i);
12     }
13   }
14 }
六、控制跳转语句标号
    标号:标记某个循环对其控制
    标号组成规则:其实就是合法的标识符
 1 public class JavaDemo {
 2   public static void main(String[] args) {
 3     /*
 4      * 标号:标记某个循环对其控制
 5      * 标号组成规则:其实就是合法的标识符
 6      */
 7     outer: for (int i = 1; i <= 10; i++) {        // outer就是标号,只要是合法的标识符即可
 8       System.out.println("i =" + i);
 9       inner: for (int j = 1; j <= 10; j++) {
10         System.out.println("j = " + j);
11         break outer;
12       }
13     }
14     System.out.println("大家好");
15     /*
16      * http: 为标号
17      * //www.baidu.com 为单行注释
18      */
19     http://www.baidu.com
20     System.out.println("才是真的好");
21   }
22 }
七、控制跳转语句return语句
    返回
    其实它的作用不是结束循环的,而是结束方法的。
 1 public class JavaDemo {
 2   public static void main(String[] args) {
 3     /*
 4      * 返回
 5      * 其实它的作用不是结束循环的,而是结束方法的。
 6      */
 7     for (int i = 1; i <= 10; i++) {
 8       if (i == 4) {
 9         // break;              // 停止循环
10         return;                // 返回的意思,用来返回方法
11       }
12     }
13     System.out.println("hello world");
14   }
15 }
    return和break以及continue的区别:
  • return是结束方法
  • break是跳出循环
  • continue是终止本次循环继续下次循环
 
 
 
 
 
 
 
 
 
 
 
posted @ 2021-03-09 14:51  sftp  阅读(121)  评论(0编辑  收藏  举报