• Java基础语法:day03【flow control】


    一、流程语句 

    概述

    在一个程序执行的过程中,各条语句的执行顺序对程序的结果是有直接影响的。也就是说,程序的流程对运行结果有直接的影响。所以,我们必须清楚每条语句的执行流程。

    而且,很多时候我们要通过控制语句的执行顺序来实现我们要完成的功能。

     顺序结构

    public class Demo01Sequence {
    	public static void main(String[] args) {
    		System.out.println("今天天气不错");
    		System.out.println("挺风和日丽的");
    		System.out.println("我们下午没课");
    		System.out.println("这的确挺爽的");
    	}
    }

    运行结果:

    "C:Program FilesJavajdk-13.0.2injava.exe" "-javaagent:C:Program FilesJetBrainsIntelliJ IDEA 2019.2libidea_rt.jar=53969:C:Program FilesJetBrainsIntelliJ IDEA 2019.2in" -Dfile.encoding=UTF-8 -classpath C:javaJavaAppsoutproductionJavaApps day03.Demo01Sequence
    今天天气不错
    挺风和日丽的
    我们下午没课
    这的确挺爽的
    
    Process finished with exit code 0

    二、判断语句

     1、判断语句1--if

    1、语句格式

    if(关系表达式){
       语句体;  
    }

    2、执行流程

    1. 首先判断关系表达式看其结果是 true还是false
    2. 如果是 true就执行语句体
    3. 如果是 false就不执行语句体

    3、示例代码

    // 单if语句
    public class Demo02If {
    	public static void main(String[] args) {
    		System.out.println("今天天气不错,正在压马路……突然发现一个快乐的地方:网吧");
    		int age = 19;
    		if (age >= 18) {
    			System.out.println("进入网吧,开始high!");
    			System.out.println("遇到了一群猪队友,开始骂街。");
    			System.out.println("感觉不爽,结账走人。");
    		}
    		System.out.println("回家吃饭");
    	}
    }

    运行结果:

    "C:Program FilesJavajdk-13.0.2injava.exe" "-javaagent:C:Program FilesJetBrainsIntelliJ IDEA 2019.2libidea_rt.jar=54040:C:Program FilesJetBrainsIntelliJ IDEA 2019.2in" -Dfile.encoding=UTF-8 -classpath C:javaJavaAppsoutproductionJavaApps day03.Demo02If
    今天天气不错,正在压马路……突然发现一个快乐的地方:网吧
    进入网吧,开始high!
    遇到了一群猪队友,开始骂街。
    感觉不爽,结账走人。
    回家吃饭
    
    Process finished with exit code 0

    2、 判断语句2--if...else

    1、语句格式

    if(关系表达式) {
       语句体1;  
    }else {
       语句体2;  
    }

    2、执行流程

    1. 首先判断关系表达式看其结果是 true还是false
    2. 如果是 true就执行语句体1
    3. 如果是 false就执行语句体2

    3、示例代码

    package day03;
    
    public class Demo03IfElse {
        public static void main(String[] args) {
            int num = 666;
    
            if (num % 2 == 0) { // 如果除以2能够余数为0,说明是偶数
                System.out.println("偶数");
            } else {
                System.out.println("奇数");
            }
        }
    }

    运行结果:

    "C:Program FilesJavajdk-13.0.2injava.exe" "-javaagent:C:Program FilesJetBrainsIntelliJ IDEA 2019.2libidea_rt.jar=54094:C:Program FilesJetBrainsIntelliJ IDEA 2019.2in" -Dfile.encoding=UTF-8 -classpath C:javaJavaAppsoutproductionJavaApps day03.Demo03IfElse
    偶数
    
    Process finished with exit code 0

     3、判断语句3--if..else if...else

    1、语句格式

    if (判断条件1) {
       执行语句1;  
    } else if (判断条件2) {
       执行语句2;  
    }
    ...
    }else if (判断条件n) {
      执行语句n;   
    } else {
       执行语句n+1;  
    }

    2、执行流程

    1. 首先判断关系表达式 1看其结果是true还是false
    2. 如果是 true就执行语句体1
    3. 如果是 false就继续判断关系表达式2看其结果是true还是false
    4. 如果是 true就执行语句体2
    5. 如果是 false就继续判断关系表达式…看其结果是true还是false
    6. 如果没有任何关系表达式为 true,就执行语句体n+1。

    3、示例代码

    // x和y的关系满足如下:
    // 如果x >= 3,那么y = 2x + 1;
    // 如果-1 < x < 3,那么y = 2x;
    // 如果x <= -1,那么y = 2x – 1;
    public class Demo04IfElseExt {
    	public static void main(String[] args) {
    		int x = -10;
    		int y;
    		if (x >= 3) {
    			y = 2 * x + 1;
    		} else if (-1 < x && x < 3) {
    			y = 2 * x;
    		} else {
    			y = 2 * x - 1;
    		}
    		System.out.println("结果是:" + y);
    	}
    } 

    运行结果:

    "C:Program FilesJavajdk-13.0.2injava.exe" "-javaagent:C:Program FilesJetBrainsIntelliJ IDEA 2019.2libidea_rt.jar=54210:C:Program FilesJetBrainsIntelliJ IDEA 2019.2in" -Dfile.encoding=UTF-8 -classpath C:javaJavaAppsoutproductionJavaApps day03.Demo04IfElseExt
    结果是:-21
    
    Process finished with exit code 0

    4、语句练习

    1、需求:

    指定考试成绩,判断学生等级
    90-100 优秀
    80-89 好
    70-79 良
    60-69 及格
    60 以下 不及格

    2、实现代码

    public class Demo05IfElsePractise {
    	public static void main(String[] args) {
    		int score = 120;
    		if (score >= 90 && score <= 100) {
    			System.out.println("优秀");
    		} else if (score >= 80 && score < 90) {
    			System.out.println("好");
    		} else if (score >= 70 && score < 80) {
    			System.out.println("良");
    		} else if (score >= 60 && score < 70) {
    			System.out.println("及格");
    		} else if (score >= 0 && score < 60) {
    			System.out.println("不及格");
    		} else { // 单独处理边界之外的不合理情况
    			System.out.println("数据错误");
    		}
    	}
    }

    运行结果:

    "C:Program FilesJavajdk-13.0.2injava.exe" "-javaagent:C:Program FilesJetBrainsIntelliJ IDEA 2019.2libidea_rt.jar=54256:C:Program FilesJetBrainsIntelliJ IDEA 2019.2in" -Dfile.encoding=UTF-8 -classpath C:javaJavaAppsoutproductionJavaApps day03.Demo05IfElsePractise
    数据错误
    
    Process finished with exit code 0
    

      int score = 99;

    "C:Program FilesJavajdk-13.0.2injava.exe" "-javaagent:C:Program FilesJetBrainsIntelliJ IDEA 2019.2libidea_rt.jar=54284:C:Program FilesJetBrainsIntelliJ IDEA 2019.2in" -Dfile.encoding=UTF-8 -classpath C:javaJavaAppsoutproductionJavaApps day03.Demo05IfElsePractise
    优秀
    
    Process finished with exit code 0

    5、if 语句和三元运算符的互换

    1、需求:

    题目:使用三元运算符和标准的if-else语句分别实现:取两个数字当中的最大值

    2、实现代码

    public class Demo06Max {
    	public static void main(String[] args) {
    		int a = 105;
    		int b = 20;
    		
    		// 首先使用三元运算符
    		// int max = a > b ? a : b;
    		
    		// 使用今天的if语句
    		int max;
    		if (a > b) {
    			max = a;
    		} else {
    			max = b;
    		}
    		
    		System.out.println("最大值:" + max);
    	}
    }
    

    运行结果

    "C:Program FilesJavajdk-13.0.2injava.exe" "-javaagent:C:Program FilesJetBrainsIntelliJ IDEA 2019.2libidea_rt.jar=54352:C:Program FilesJetBrainsIntelliJ IDEA 2019.2in" -Dfile.encoding=UTF-8 -classpath C:javaJavaAppsoutproductionJavaApps day03.Demo06Max
    最大值:105
    
    Process finished with exit code 0

    三、选择语句

     1、选择语句--switch

    1、语句格式

    switch(表达式) {
      case 常量值1:
        语句体1;
        break;
      case 常量值2:
        语句体2;
        break;
      ...
      default:
        语句体n+1;
        break;
    }

    2、执行流程

    1. 首先计算出表达式的值
    2. 其次,和 case依次比较,一旦有对应的值,就会执行相应的语句,在执行的过程中,遇到break就会结束。
    3. 最后,如果所有的 case都和表达式的值不匹配,就会执行default语句体部分,然后程序结束掉。

    3、示例代码

    public class Demo08SwitchNotice {
    	public static void main(String[] args) {
    		int num = 2;
    		switch (num) {
    			case 1:
    				System.out.println("你好");
    				break;
    			case 2:
    				System.out.println("我好");
    				// break;
    			case 3:
    				System.out.println("大家好");
    				break;
    			default:
    				System.out.println("他好,我也好。");
    				break;
    		} // switch
    	}
    }

    运行结果:

    "C:Program FilesJavajdk-13.0.2injava.exe" "-javaagent:C:Program FilesJetBrainsIntelliJ IDEA 2019.2libidea_rt.jar=54463:C:Program FilesJetBrainsIntelliJ IDEA 2019.2in" -Dfile.encoding=UTF-8 -classpath C:javaJavaAppsoutproductionJavaApps day03.Demo08SwitchNotice
    我好
    大家好
    
    Process finished with exit code 0

    4、注意事项

    1. 多个case后面的数值不可以重复。

    2. switch后面小括号当中只能是下列数据类型:

    1. 基本数据类型:byte/short/char/int
    2. 引用数据类型:String字符串、enum枚举

    3. switch语句格式可以很灵活:前后顺序可以颠倒,而且break语句还可以省略。“匹配哪一个case就从哪一个位置向下执行,直到遇到了break或者整体结束为止。”

    2、 case 的穿透性

    在switch语句中,如果case的后面不写break,将出现穿透现象,也就是不会在判断下一个case的值,直接向后运行,直到遇到break,或者整体switch结束

    public static void main(String[] args) {
      int i = 5;
      switch (i){
        case 0:
          System.out.println("执行case0");
          break;
        case 5:
          System.out.println("执行case5");
        case 10:
          System.out.println("执行case10");
        default:
          System.out.println("执行default");
      }
    }

    上述程序中,执行case5后,由于没有break语句,程序会一直向后走,不会在判断case,也不会理会break,直接运行完整体switch。

    由于case存在穿透性,因此初学者在编写switch语句时,必须要写上break。

    第四章 循环语句

    1、 循环语句1--for

    循环结构的基本组成部分,一般可以分成四部分:

    1. 初始化语句:在循环开始最初执行,而且只做唯一一次。
    2. 条件判断:如果成立,则循环继续;如果不成立,则循环退出。
    3. 循环体:重复要做的事情内容,若干行语句。
    4. 步进语句:每次循环之后都要进行的扫尾工作,每次循环结束之后都要执行一次。

    1、语句格式

    for(初始化表达式①; 布尔表达式②; 步进表达式④){
    循环体③        
    }

    2、执行流程

    执行顺序:①②③④ >②③④>②③④…②不满足为止。
    ①负责完成循环变量初始化
    ②负责判断是否满足循环条件,不满足则跳出循环
    ③具体执行的语句
    ④循环后,循环条件所涉及变量的变化情况

    3、示例代码

    public class Demo09For {
    	public static void main(String[] args) {
    		for (int i = 1; i <= 5; i++) {
    			System.out.println("我错啦!原谅我吧!" + i);
    		}
    		System.out.println("程序停止");
    	}
    }

    运行结果:

    "C:Program FilesJavajdk-13.0.2injava.exe" "-javaagent:C:Program FilesJetBrainsIntelliJ IDEA 2019.2libidea_rt.jar=54743:C:Program FilesJetBrainsIntelliJ IDEA 2019.2in" -Dfile.encoding=UTF-8 -classpath C:javaJavaAppsoutproductionJavaApps day03.Demo09For
    我错啦!原谅我吧!1
    我错啦!原谅我吧!2
    我错啦!原谅我吧!3
    我错啦!原谅我吧!4
    我错啦!原谅我吧!5
    程序停止
    
    Process finished with exit code 0

    2、  循环语句2--while

    1、语句格式

    初始化表达式①
      while(布尔表达式②){
        循环体③
        步进表达式④
    }

    2、执行流程

    执行顺序:①②③④ >②③④>②③④…②不满足为止。
    ①负责完成循环变量初始化。
    ②负责判断是否满足循环条件,不满足则跳出循环。
    ③具体执行的语句。
    ④循环后,循环变量的变化情况。

    3、示例代码

    public class Demo10While {
    	public static void main(String[] args) {
    		for (int i = 1; i <= 5; i++) {
    			System.out.println("我错啦!" + i);
    		}
    		System.out.println("=================");
    		
    		int i = 1; // 1. 初始化语句
    		while (i <= 5) { // 2. 条件判断
    			System.out.println("我错啦!" + i); // 3. 循环体
    			i++; // 4. 步进语句
    		}
    	}
    }

    运行结果:

    "C:Program FilesJavajdk-13.0.2injava.exe" "-javaagent:C:Program FilesJetBrainsIntelliJ IDEA 2019.2libidea_rt.jar=55015:C:Program FilesJetBrainsIntelliJ IDEA 2019.2in" -Dfile.encoding=UTF-8 -classpath C:javaJavaAppsoutproductionJavaApps day03.Demo10While
    我错啦!1
    我错啦!2
    我错啦!3
    我错啦!4
    我错啦!5
    =================
    我错啦!1
    我错啦!2
    我错啦!3
    我错啦!4
    我错啦!5
    
    Process finished with exit code 0

     3、 循环语句3--do...while1、语句格式

    1、语句格式

    初始化表达式①
        do{
        循环体③
        步进表达式④
    }while(布尔表达式②);

    2、执行流程

    执行顺序:①③④ >②③④>②③④…②不满足为止。
    ①负责完成循环变量初始化。
    ②负责判断是否满足循环条件,不满足则跳出循环。
    ③具体执行的语句
    ④循环后,循环变量的变化情况

    3、示例代码

    package day03;
    
    public class Demo11DoWhile {
        public static void main(String[] args) {
            for (int i = 1; i <= 5; i++) {
                System.out.println("原谅你啦!起来吧!地上怪凉!" + i);
            }
            System.out.println("===============");
    
            int i = 1; // 1. 初始化语句
            do {
                System.out.println("原谅你啦!起来吧!地上怪凉!" + i); // 3. 循环体
                i++; // 4. 步进语句
            } while (i <= 3); // 2. 条件判断
        }
    }

    运行结果:

    "C:Program FilesJavajdk-13.0.2injava.exe" "-javaagent:C:Program FilesJetBrainsIntelliJ IDEA 2019.2libidea_rt.jar=55124:C:Program FilesJetBrainsIntelliJ IDEA 2019.2in" -Dfile.encoding=UTF-8 -classpath C:javaJavaAppsoutproductionJavaApps day03.Demo11DoWhile
    原谅你啦!起来吧!地上怪凉!1
    原谅你啦!起来吧!地上怪凉!2
    原谅你啦!起来吧!地上怪凉!3
    原谅你啦!起来吧!地上怪凉!4
    原谅你啦!起来吧!地上怪凉!5
    ===============
    原谅你啦!起来吧!地上怪凉!1
    原谅你啦!起来吧!地上怪凉!2
    原谅你啦!起来吧!地上怪凉!3
    
    Process finished with exit code 0

    语句练习

    题目:求出1-100之间的偶数和。

    思路:

    1. 既然范围已经确定了是1到100之间,那么我就从1、2、3……一直到100这么多数字一个一个进行检查。
    2. 总共有100个数字,并非所有数字都能用。必须要是偶数才能用,判断(if语句)偶数:num % 2 == 0
    3. 需要一个变量,用来进行累加操作。也就好比是一个存钱罐。

    实现代码

    package day03;
    
    public class Demo12HundredSum {
        public static void main(String[] args) {
            int sum = 0; // 用来累加的存钱罐
    
            for (int i = 1; i <= 100; i++) {
                if (i % 2 == 0) { // 如果是偶数
                    sum += i;
                }
            }
            System.out.println("结果是:" + sum);
        }
    }

    运行结果

    "C:Program FilesJavajdk-13.0.2injava.exe" "-javaagent:C:Program FilesJetBrainsIntelliJ IDEA 2019.2libidea_rt.jar=55210:C:Program FilesJetBrainsIntelliJ IDEA 2019.2in" -Dfile.encoding=UTF-8 -classpath C:javaJavaAppsoutproductionJavaApps day03.Demo12HundredSum
    结果是:2550
    
    Process finished with exit code 0

    4、 循环语句的区别

    1. 如果条件判断从来没有满足过,那么for循环和while循环将会执行0次,但是do-while循环会执行至少一次。

    2. for循环的变量在小括号当中定义,只有循环内部才可以使用。while循环和do-while循环初始化语句本来就在外面,所以出来循环之后还可以继续使用。

    示例代码

    package day03;
    
    public class Demo13LoopDifference {
        public static void main(String[] args) {
            for (int i = 1; i < 0; i++) {
                System.out.println("Hello");
            }
            // System.out.println(i); // 这一行是错误写法!因为变量i定义在for循环小括号内,只有for循环自己才能用。
            System.out.println("================");
    
            int i = 1;
            do {
                System.out.println("World");
                i++;
            } while (i < 0);
            // 现在已经超出了do-while循环的范围,我们仍然可以使用变量i
            System.out.println(i); // 2
        }
    }

    运行结果:

    "C:Program FilesJavajdk-13.0.2injava.exe" "-javaagent:C:Program FilesJetBrainsIntelliJ IDEA 2019.2libidea_rt.jar=55277:C:Program FilesJetBrainsIntelliJ IDEA 2019.2in" -Dfile.encoding=UTF-8 -classpath C:javaJavaAppsoutproductionJavaApps day03.Demo13LoopDifference
    ================
    World
    2
    
    Process finished with exit code 0

    5、跳出语句

    break关键字的用法有常见的两种:

    1. 可以用在switch语句当中,一旦执行,整个switch语句立刻结束。
    2. 还可以用在循环语句当中,一旦执行,整个循环语句立刻结束。打断循环。

    示例代码

    package day03;
    
    public class Demo14Break {
        public static void main(String[] args) {
            for (int i = 1; i <= 10; i++) {
                // 如果希望从第4次开始,后续全都不要了,就要打断循环
                if (i == 4) { // 如果当前是第4次
                    break; // 那么就打断整个循环
                }
                System.out.println("Hello" + i);
            }
        }
    }
    

      输出

    "C:Program FilesJavajdk-13.0.2injava.exe" "-javaagent:C:Program FilesJetBrainsIntelliJ IDEA 2019.2libidea_rt.jar=55344:C:Program FilesJetBrainsIntelliJ IDEA 2019.2in" -Dfile.encoding=UTF-8 -classpath C:javaJavaAppsoutproductionJavaApps day03.Demo14Break
    Hello1
    Hello2
    Hello3
    
    Process finished with exit code 0

    关于循环的选择,有一个小建议:凡是次数确定的场景多用for循环;否则多用while循环。

    另一种循环控制语句是continue关键字。

    一旦执行,立刻跳过当前次循环剩余内容,马上开始下一次循环。

    示例代码

    package day03;
    
    public class Demo15Continue {
        public static void main(String[] args) {
            for (int i = 1; i <= 10; i++) {
                if (i == 4) { // 如果当前是第4层
                    continue; // 那么跳过当前次循环,马上开始下一次(第5层)
                }
                System.out.println(i + "层到了。");
            }
        }
    }
    

    运行结果

    "C:Program FilesJavajdk-13.0.2injava.exe" "-javaagent:C:Program FilesJetBrainsIntelliJ IDEA 2019.2libidea_rt.jar=55344:C:Program FilesJetBrainsIntelliJ IDEA 2019.2in" -Dfile.encoding=UTF-8 -classpath C:javaJavaAppsoutproductionJavaApps day03.Demo14Break
    Hello1
    Hello2
    Hello3
    
    Process finished with exit code 0

    五、扩展知识

     1、死循环

    永远停不下来的循环,叫做死循环。

    1、语句格式

    死循环的标准格式:
    while (true) {
    	循环体
    }

    2、示例代码

    package day03;
    
    public class Demo16DeadLoop {
        public static void main(String[] args) {
            while (true) {
                System.out.println("I Love Java!");
            }
    
            // System.out.println("Hello");
        }
    }

    运行结果:

    "C:Program FilesJavajdk-13.0.2injava.exe" "-javaagent:C:Program FilesJetBrainsIntelliJ IDEA 2019.2libidea_rt.jar=55737:C:Program FilesJetBrainsIntelliJ IDEA 2019.2in" -Dfile.encoding=UTF-8 -classpath C:javaJavaAppsoutproductionJavaApps day03.Demo15Continue
    
    I Love Java!
    I Love Java!
    I Love Java!
    ...
    无休止的下去

    在后期的开发中,会出现使用死循环的场景,例如:我们需要读取用户输入的输入,但是用户输入多少数据我们并不清楚,也只能使用死循环,当用户不想输入数据了,
    就可以结束循环了,如何去结束一个死循环呢,就需要使用到跳出语句了。

    2、 嵌套循环

    所谓嵌套循环 ,是指一个循环的循环体是另一个循环。比如for循环里面还有一个for循环,就是嵌套循环。总共的循环次数=外循环次数*内循环次数

    1、语句格式

    for(初始化表达式①; 循环条件②; 步进表达式⑦) {
        for(初始化表达式③; 循环条件④; 步进表达式⑥) {
           执行语句⑤;  
        }
    } 

    2、执行流程

    执行顺序:①②③④⑤⑥ >④⑤⑥>⑦②③④⑤⑥>④⑤⑥
    外循环一次,内循环多次。
    比如跳绳:一共跳 5组,每组跳10个。5组就是外循环,10个就是内循环。

    3、示例代码

    public static void main(String[] args) {
        //5*8的矩形,打印5行*号,每行8个
        //外循环5次,内循环8次
        for(int i = 0; i < 5; i++){
            for(int j = 0; j < 8; j++){
                //不换行打印星号
                System.out.print("*");
            }
            //内循环打印8个星号后,需要一次换行
            System.out.println();
    }

    运行结果:

    "C:Program FilesJavajdk-13.0.2injava.exe" "-javaagent:C:Program FilesJetBrainsIntelliJ IDEA 2019.2libidea_rt.jar=56980:C:Program FilesJetBrainsIntelliJ IDEA 2019.2in" -Dfile.encoding=UTF-8 -classpath C:javaJavaAppsoutproductionJavaApps day03.Demo16DeadLoop
    ********
    ********
    ********
    ********
    ********
    
    Process finished with exit code 0
  • 相关阅读:
    [LC] 131. Palindrome Partitioning
    [LC] 216. Combination Sum III
    [LC] 90. Subsets II
    [Algo] 73. Combinations Of Coins
    [Algo] 66. All Valid Permutations Of Parentheses I
    Hive 和 HBase区别
    form表单 多种提交方式 [转]
    HDFS 好的文章链接
    js 获取字符串的 像素 宽度 ----字符串格式化输出
    python 本地变量和全局变量 locals() globals() global nonlocal 闭包 以及和 scala 闭包的区别
  • 原文地址:https://www.cnblogs.com/luoahong/p/12597228.html
Copyright © 2020-2023  润新知