day05_流程控制语句

今日内容

零、 复习昨日
一、流程控制语句

零、 复习昨日

1 解释/(除法)的特殊点

  • 整数相除取整,不保留小数

2 i++和++i有什么相同点和不同点

  • 相同点:都会自增1
  • 不同点:++在后i就先使用后自增,++在前i就自增再使用

3 && 短路与,是如何短路的?

  • & 一错就错,但是后面表达式还会执行
  • && 一错就错,但是如果前面式子已经是false,后面式子不再执行

4 三目运算的语法结构和执行顺序

  • 语法结构: 表达式 ? 值1 : 值2;
  • 执行顺序:1) 先执行表达式2)根据结果,true执行值13)false时执行值2

5 解释代码
byte b = 1;
b = b + 1; // 这行代码有什么问题?
程序出现的任何整型都是int,即1是int
b是byte
执行加法后,结果的类型是int
但是赋值给byte类型的变量b,就会出现类型不匹配
此时会报错,需要强转 b = (byte)(b+1);

补充

6 运算符的优先级
boolean r = a + 1 > b && (a < b || a + b < 0);

  • 先算括号
  • 再算术运算 (先乘除后加减)
  • 再关系运算 (从左至右依次运算)
  • 后逻辑运算 (从左至右依次运算)
  • 最最后是赋值运算

7 关系式子写法

数学上,表示一个范围,价格x在1000~2000之间,1000 < x < 2000;

在java中,不能这么写,需要分开写
x > 1000 && x < 2000

一、作业

    public static void main(String[] args) {
        // 华氏温度 = (摄氏温度 × 9/5) + 32
        // 编写一个程序,从用户输入的摄氏温度中将其转换为华氏温度,并显示结果。
        Scanner scanner = new Scanner(System.in);
        System.out.println("输入摄氏温度" );
        double t = scanner.nextDouble();
        double h = (t * 9 / 5) + 32;

        System.out.println("对应华氏温度:" + h );
    }

二、流程控制语句

目前程序的执行流程

  • 从main方法开始
  • 方法内每一行从上执行依次执行

流程控制: 所谓控制就是可以改变原有的顺序,例如

  • 可以跳过某行代码不执行
  • 也可以让某行代码一直执行

流程控制语句有哪些?

  • 分支语句
    • if
    • if-else
    • if-elseif
  • 选择语句
    • switch[了解]
  • 循环语句
    • while
    • dowhile
    • for

2.1 分支语句

2.1.1 if (单分支)

if是如果的意思,作用用来判断一个条件,从而决定一个代码是否执行

语法:

if (布尔表达式) {

​ 执行语句;

}

作用:

  • 代码执行到if,就会判断表达式,
  • 如果表达式结果是true,就会执行{}内的代码,继续执行后续的
  • 如果表达式结果是false,就会跳过{}内代码不执行,直接执行后续的

练习: 根据年龄,判断是否可以考驾照,如果年龄大于等于18岁,就输出可以考

    public static void main(String[] args) {
        // 练习: 根据年龄,判断是否可以考驾照,
        // 如果年龄大于等于18岁,就输出可以考
        // int age = 20;
        // if (age > 18) {
        //     System.out.println("可以考驾照" );
        // }
        // System.out.println("你好" );


        // 升级: 根据年龄,判断是否可以考驾照,
        // 如果年龄大于等于18岁并且小于等于70,就输出可以考
        int age = 120;
        if (age >= 18 && age <= 70) {
            System.out.println("考驾照" );
        }
        System.out.println("你好" );
    }

2.1.2 if-else(双分支)

二选一执行

package com.qf.ctrl;

/**
 * ---      天道酬勤    ---
 * --- 代码敲烂 月薪过万 ---
 *
 * @author QiuShiju
 * @desc if-else
 */
public class Demo2 {

    public static void main(String[] args) {

        /**
         * if-else语句,二选一执行
         * if是如果,else否则,其他的
         * --------------------
         * if (布尔表达式) {
         *     执行语句1;
         * } else {
         *     执行语句2;
         * }
         *---------------------------
         * 1) 执行到if,先执行表达式判断
         * 2) 如果表达式是true就执行if后的{}内的语句1,不执行else里面语句2
         * 3) 如果表达式是false,就跳过if转而else后{}语句2
         */
        int age = 120;
        if (age >= 18 && age <= 70) {
            System.out.println("可以考驾照");
        } else {
            System.out.println("不可以考" );
        }
        System.out.println("-------------------------" );
        // 定义两个变量,输出其中较大值
        int a = 1;
        int b = 2;
        if(a > b) {
            System.out.println("a大,a = " + a );
        } else {
            System.out.println("b大,b = " + b );
        }

        System.out.println("-------------------------" );
        // 声明一个int型的数据,判断这个数是否能被2整除,
        // 如果能被2整除,那么输出“这个数是偶数”,
        // 否则输出“这个数是奇数”。
        int x = 8;
        if (x % 2 == 0) {
            System.out.println(x + "是偶数" );
        } else {
            System.out.println(x + "是奇数" );
        }
        System.out.println("-------------------------" );
        // 判断一个整数是否为正数。
        // 如果是正数,打印"这是一个正数",
        // 否则打印"这不是一个正数"。
        int y = 5;
        if (y > 0) {
            System.out.println(y + "是一个正数" );
        } else {
            System.out.println(y + "不是正数" );
        }
        System.out.println("-------------------------" );
        // 定义三个变量,输出其中较大值
        int i = 1;
        int j = 2;
        int k = 3;
        if (i > j) {
            if (i > k) {
                System.out.println("i最大,i="+i );
            } else {
                System.out.println("k最大,k="+k );
            }
        } else {
            if (j > k) {
                System.out.println("j最大,j="+j );
            } else {
                System.out.println("k最大,k="+k );
            }
        }


        System.out.println("-------------------------" );
        // 判断一个整数是否为正数负数或者0。
        // 如果是正数,打印"这是一个正数",
        // 如果是0,打印"是0"。
        // 如果是负数,打印"这是一个负数"。
        int q = 1;
        if (q > 0) {
            System.out.println("q是正数" );
        } else {
            if (q < 0) {
                System.out.println("q是负数" );
            } else {
                System.out.println("q是0" );
            }
        }
    }
}

2.1.3 if-elseif-else(多分支)

需求: 老人电话,数字按钮变量, 长按1输出打给儿子,长按2输出打给女儿,长按3输出打给老伴儿,长按输出4报警

package com.qf.ctrl;

/**
 * ---      天道酬勤    ---
 * --- 代码敲烂 月薪过万 ---
 *
 * @author QiuShiju
 * @desc
 */
public class Demo3 {

    public static void main(String[] args) {
        // ---- 使用if-else实现 ----
        // 需求: 老人电话,数字按钮变量,
        // 长按1输出打给儿子,长按2输出打给女儿,
        // 长按3输出打给老伴儿,长按输出4报警
        int num = 1;
        if (num == 1) {
            System.out.println("打给儿子" );
        } else {
            if (num == 2) {
                System.out.println("打给女儿" );
            } else {
                if (num == 3) {
                    System.out.println("打给老伴儿" );
                } else {
                    if (num == 4) {
                        System.out.println("报警" );
                    } else {
                        System.out.println("正常按键..." );
                    }
                }
            }
        }
        System.out.println("-----------------------------" );
        /**
         * if-elseif: 多分支语句,多选一
         * 语法:
         * if(布尔表达式1) {
         *     执行语句1;
         * } else if(布尔表达式2){
         *     执行语句2;
         * } else if(布尔表达式3) {
         *     执行语句3;
         * } ... {
         *     执行语句n
         * } else {
         *    执行语句;
         * }
         * 执行流程:
         * 1) 先执行到if,判断
         * 2) 结果是true,执行第一个语句,后续else直接跳过不执行
         * 3) 结果是false,执行第二个elseif后判断,结果为true,执行语句2,如果是false
         * 4) 执行第三个elseif后判断,以此类推
         * ...
         * 5) 如果以上所有的判断都不成立,执行最后一个else
         */
        // 需求: 老人电话,数字按钮变量,
        // 长按1输出打给儿子,长按2输出打给女儿,
        // 长按3输出打给老伴儿,长按输出4报警,其他按键输出正常按键...
        int x = 1;
        if (x == 1) {
            System.out.println("打给儿子" );
        } else if (x == 2) {
            System.out.println("打给女儿" );
        } else if (x == 3) {
            System.out.println("打给老伴儿" );
        } else if (x == 4) {
            System.out.println("打给经常" );
        } else {
            System.out.println("正常输出" );
        }
        System.out.println("-----------------------------" );
        // 判断一个正常是 正数,负数,0
        int y = -1;
        if (y > 0) {
            System.out.println("正数" );
        } else if (y < 0) {
            System.out.println("负数" );
        } else {
            System.out.println("等于0" );
        }
    }
}

2.2 选择语句

switch case语句

  • switch选择,转换的意思
  • case 情况,案例的意思

语法

switch(数值) {
  case:1
      执行语句;
      break;  
  case:2
      执行语句;
      break; 
...
    default:
        执行语句;
}
package com.qf.ctrl;

/**
 * ---      天道酬勤    ---
 * --- 代码敲烂 月薪过万 ---
 *
 * @author QiuShiju
 * @desc
 */
public class Demo5 {

    public static void main(String[] args) {
        /**
         * switch是拿着后面的数字和case后的数字做等值比较
         * 相等的话执行其后的代码,其他的不再执行
         * 如果不相等,继续判断下一个case
         * 如果所有case都不相等,执行default内
         */
        // 需求: 老人电话,数字按钮变量,
        // 长按1输出打给儿子,长按2输出打给女儿,
        // 长按3输出打给老伴儿,长按输出4报警,其他按键输出正常按键...
        int num = 1;
        switch (num) {// 此处支持类型byte short int char,及字符串,枚举
            case 1:// case后类型必须和switch后一致
                   // case后只能是定值
                   // case后是冒号
                System.out.println("打给儿子" );
                // break; // 其实可写可不写
                         // 但是不写break,会造成case击穿
                        // 即break的作用是用来结束当前switch执行
            case 2:
                System.out.println("打给女儿" );
                break;
            case 3:
                System.out.println("打给你" );
                break;
            case 4:
                System.out.println("打给警察" );
            default:
                System.out.println("正常按键" );
        }
        /**
         * switch整体语法不是重点
         * 但是break这个特性需要记住: 用来结束当前结构执行
         */
    }
}

三、练习

声明一个int型的数据,判断这个数是否能被2整除,如果能被2整除,那么输出“这个数是偶数”,否则输出“这个数是奇数”。

判断一个整数是否为正数。如果是正数,打印"这是一个正数",否则打印"这不是一个正数"。

给定两个整数,比较它们的大小并打印结果。如果第一个数较大,输出"第一个数较大",如果第二个数较大,输出"第二个数较大",如果两个数相等,输出"两个数相等"。

给定一个成绩,根据成绩的范围打印相应的等级。90及以上为"A级",80-89为"B级",70-79为"C级",60-69为"D级",60以下为"E级"。

编写一个程序,根据用户输入的月份,判断该月份的天数并输出。假设输入的月份范围为1到12。
package com.qf.ctrl;

import java.util.Scanner;

/**
 * ---      天道酬勤    ---
 * --- 代码敲烂 月薪过万 ---
 *
 * @author QiuShiju
 * @desc 练习
 */
public class Demo4 {

    public static void main(String[] args) {
        // 给定两个整数,比较它们的大小并打印结果。
        // 如果第一个数较大,输出"第一个数较大",
        // 如果第二个数较大,输出"第二个数较大",
        // 如果两个数相等,输出"两个数相等"。
        int a = 2;
        int b = 2;
        if (a > b) {
            System.out.println("a > b" );
        } else if (a < b) {
            System.out.println("b > a" );
        } else {
            System.out.println("a == b" );
        }

        System.out.println("--------------" );
        // 给定一个成绩,根据成绩的范围打印相应的等级。
        // 90及以上为"A级",80-89为"B级",70-79为"C级",
        // 60-69为"D级",60以下为"E级"。
        int score = 90;
        if (score >= 90) {
            System.out.println("A级" );
        } else if (score >= 80) {
            System.out.println("B级" );
        } else if (score >= 70) {
            System.out.println("C级" );
        } else if (score >= 60) {
            System.out.println("D级" );
        } else {
            System.out.println("E级" );
        }

        System.out.println("--------------" );
        // 编写一个程序,根据用户输入的年份,月份,
        // 判断该月份的天数并输出。考虑平年和闰年情况
        // 假设输入的月份范围为1到12。

        // 常识:
        // 闰年: 年份能被4整除,且不能被100整除,或者能被400整除的年份
        // 月份: 13578十腊,31天永不差
        //       其他30天,闰年2月29天,平年28天
        /**
         * 整体思路:
         * 先判断月份,再判断年份
         * 因为只有2月特殊,所有只在2月份里面判断平年闰年
         * 考虑健壮性,即一些特殊情况也有给出提示
         */
        Scanner scanner = new Scanner(System.in);
        System.out.print("请输入年份:" );
        int year = scanner.nextInt();

        if (year > 0) {
            System.out.print("请输入月份:" );
            int month = scanner.nextInt();
            if (month >= 1 && month <= 12) {
                if (month == 2) {
                    if (year % 4 == 0 && year % 100 != 0 || year % 400 == 0) {
                        System.out.println(year+"是闰年,2月,有29天" );
                    } else {
                        System.out.println(year+"是平年,2月,有28天" );
                    }
                } else if (month == 4 || month == 6 || month == 9 ||month == 11) {
                    System.out.println(year+"年,"+month +"月,有30天" );
                } else {
                    System.out.println(year+"年,"+month +"月,有31天" );
                }
            } else {
                System.out.println("输入合适的月份!" );
            }
        } else {
            System.out.println("年份有误!" );
        }
    }
}

四、总结

以后最常用的是if和ifelse

敲代码习惯, 不要偷懒,多敲

关于作业,只看题目自己完成,不要照抄

如果是要照抄也要自己加注释

你可能感兴趣的:(#,Java2313,java,前端,服务器)