当前位置 博文首页 > RtxTitanV的博客:Java基础知识总结之控制流程

    RtxTitanV的博客:Java基础知识总结之控制流程

    作者:[db:作者] 时间:2021-07-07 10:07

    流程是指程序运行时,各语句的执行顺序。控制流程就是用来控制程序中各语句执行的顺序。控制流程结构分为顺序结构、选择结构和循环结构三种。

    本文主要对Java的控制流程进行简单总结。

    一、块作用域

    块(即复合语句)是指由一对大括号括起来的若干条简单的Java语句。块确定了变量的作用域。一个块可以嵌套在另一个块中。下面就是在main方法块中嵌套另一个语句块的示例:

    public static void main(String[] args) {
        int n;
        ...
        {
            int k;
            ...
        }
    }
    

    但是,不能在嵌套的两个块中声明同名变量。

    二、顺序结构

    顺序结构是程序中最简单最基本的控制流程结构,就是按照代码的先后顺序,依次执行。顺序结构流程图如下:
    1
    代码示例:

    public class OrderDemo {
        public static void main(String[] args) {
            System.out.println("开始");
            System.out.println("Hello World");	
            System.out.println("结束");
        }
    }
    

    三、选择结构

    选择结构也被称为分支结构,可根据不同的条件按照不同的选择执行不同的代码。包括if条件语句和switch语句。其中if条件语句有ifif···elseif···else if三种格式。

    1.if语句

    格式:if(condition) statement

    注意:这里的statement可以是一条简单语句也可以是一个块(复合语句)。

    if语句控制流程图如下:
    2
    执行流程说明:先判断关系表达式的值是true还是false,如果是true则执行语句体,如果是false则不执行语句体。

    代码示例:

    public class IfDemo {
        public static void main(String[] args) {  
            System.out.println("开始"); 
    	    int x = 10;
            
            if (x == 10) {
        	    System.out.println("x等于10");
            }
            
            if (x == 20) {
                System.out.println("x等于20");
            }
            
            System.out.println("结束");
        }
    }
    

    2.if···else语句

    格式:if (condition) statement1 else statement2

    if···else语句控制流程图如下:
    3
    执行流程说明:先判断关系表达式的值是true还是false,如果是true则执行语句体1,如果是false则执行语句体2。

    注意:

    • else部分是可选的,else子句与最邻近的if构成一组。
    • 三元运算符和if···else语句的情况很相似,在某些情况下应该是可以相互转换。三元运算符的操作都可以使用if语句改进,反之不成立。比如if语句的语句体是一条输出语句的时候,因为三元运算符是一个运算符,必须要求有一个结果返回,而输出语句却不能作为一个返回结果。

    代码示例:

    public class IfDemo2 {
        public static void main(String[] args) {
            // 创建键盘录入对象
            Scanner sc = new Scanner(System.in);
            
            // 获取两个数据中较大的值
            System.out.println("请输入第一个数据:");
            int a = sc.nextInt();
            
            System.out.println("请输入第二个数据:");
            int b = sc.nextInt();
            
            // 定义一个变量接收最大值
            int max;
            
            if (a > b) {
                max = a;
            } else {
    		    max = b;
            }
            
            System.out.println("max:" + max);
            System.out.println("----------------");
            
            // 判断一个数据是奇数还是偶数
            System.out.println("请输入你要判断的数据:");
            int x = sc.nextInt();
            
            if (x % 2 == 0) {
    		    System.out.println(x + "这个数据是偶数");
            } else {
    		    System.out.println(x + "这个数据是奇数");
            }
        }
    }
    

    3.if···else if语句

    格式:if (condition1) statement1 else if (condition2) statement2···else statement(n+1)

    if···else if语句控制流程图如下:
    4
    执行流程说明:判断关系表达式1的值是true还是false,如果是true,就执行语句体1,如果是false,就继续判断关系表达式2的值是true还是false,如果是true,就执行语句体2,如果是false,就继续判断关系表达式3的值是true还是false···如果都不满足,就执行语句体n+1。

    代码示例:

    public class IfDemo3 {
        public static void main(String[] args) {
            /*
            键盘录入一个成绩,判断并输出成绩的等级。等级如下:
            	90-100 优秀
            	80-90  好
            	70-80  良
            	60-70  及格
            	0-60   不及格
            */
            
            // 创建键盘录入对象
            Scanner sc = new Scanner(System.in);
            
            // 输入数据
            System.out.println("请输入考试成绩:");
            int score = sc.nextInt();
            
            if (score < 0 || score > 100) {
                System.out.println("输入的成绩有误");
            } else 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 {
                System.out.println("不及格");
            }
        }
    }
    

    4.switch语句

    格式:

    switch (表达式) { 
      case1:
        语句体1
        [break;]
    ...
      case 值n:
        语句体n
        [break;]
      default:
        语句体 n+1;
        [break;]
    }  
    

    解释:

    • swich中表达式的取值:byte、short、int、char、枚举(JDK1.5)、String(JDK1.7)。
    • case:后面的值就是要和表达式进行比较的值。
    • break:表示程序到这里中断,跳出switch语句。可以省略但最好不要省略。
    • default:如果所有的情况都不匹配,就执行这里,相当于if语句中的else。

    switch语句控制流程图如下:
    5
    执行流程说明:首先计算表达式的值,然后和每一个case进行比较,如果有匹配的就执行对应的语句体,遇到break或执行到switch语句结束处为止。最后,如果没有匹配的,并且有default字句,就执行default的语句体。

    注意:

    • case子句中的值必须是常量,且所有case子句中的值应该是不同的。
    • default可以省略,但是不建议,因为它的作用是对不正确的情况给出提示。
    • default并不是一定要放在switch语句最后,它可以出现在switch语句任意位置。
    • break可以省略,但是不建议,如果在case分支语句的末尾没有break语句,那么就会接着执行下一个case分支语句,这可能会引发错误。
    • 当在switch语句中使用枚举常量时,不必在每个case中指明枚举名,可以由switch的表达式值确定。

    代码示例:

    public class SwitchDemo {
        public static void main(String[] args) {
            /*
            键盘录入一个数字(1-7),输出对应是星期几
            */
            
            // 创建键盘录入对象
            Scanner sc = new Scanner(System.in);
            
            // 输入数据
            System.out.println("请输入一个数据:");
            int week = sc.nextInt(); 
            
            // switch判断语句
            switch (week) {
                case 1:
                    System.out.println("星期一");
                    break;
                case 2:
                    System.out.println("星期二");
                    break;
                case 3:
                    System.out.println("星期三");
                    break;
                case 4:
                    System.out.println("星期四");
                    break;
                case 5:
                    System.out.println("星期五");
                    break;
                case 6:
                    System.out.println("星期六");
                    break;
                case 7:
                    System.out.println("星期日");
                    break;
    			default:
                    System.out.println("输入的数据有误");
                    break;
            }
        }
    }
    
    public class SwitchDemo2 {
        public static void main(String[] args) {
            /*
            根据给定的月份,输出对应的季节
            */
            
            // 创建键盘录入对象
            Scanner sc = new Scanner(