一. 运算符

(一) 三元运算

1.元的概念: 可以操作的数据或者表达式.

2.三元运算符: 别名三目运算符,同时可以操作三个数据或者表达式的运算符.

3.格式:

        表达式1 ? 表达式2 : 表达式3;

4.说明:

        1)表达式1必须是boolean类型的表达式,计算结果只能是true、或者false

        2)表达式2和表达式3可以是任意类型的表达式

5.运算流程:  

        1)计算表达式1的值,要么为true,要么为false

        2)如果表达式1计算结果为true,就选择表达式2作为三元表达式的计算结果

        3)如果表达式1计算结果为false,就选择表达式3作为三元表达式的计算结果

 

        案例1: 获取两个整数的较大值

        案例2: 判断一个正整数变量是奇数还是偶数

public class Demo08_三元运算 {
    public static void main(String[] args) {
        // 1. 定义两个整数, 获取出较大值
        int x = 78;
        int y = -9;
        // 表达式1 ? 表达式2 : 表达式3;
        int max = x >= y ? x : y;
        System.out.println(max);

        // 案例2: 判断一个正整数变量是奇数还是偶数
        int w = 19;
        String str = w % 2 == 0 ? w+"是偶数" : w+"是奇数";
        System.out.println(str);

        // 案例3: 定义出三个整数, 求出最大值
        // max1表示三个数中的最大值
        int max1 = x > y ? x : y;
        max1 = max1 > w ? max1 : w;
        System.out.println(max1);

    }

}

 

二. 键盘录入之Scanner类

1.键盘录入: Scanner类,来自于java.util包,是JDK提供的类型.

2.作用: 在程序运行的过程中,可以使用Scanner类来实现获取从键盘输入的数据,提高数据来源灵活度.

3.Scanner类使用步骤:

        第一步: 导包

                 目的: 为了让JVM定位到Scanner类型所在的具体路径

                 导入方式: 类的声明之上使用关键字import,表示导入

            import  java.util.Scanner;

        第二步: 创建键盘录入对象,Scanner sc = new Scanner(System.in);

        第三步: 调用sc对象的nextInt方法,获取键盘录入的一个整数

                   int x = sc.nextInt();

        第四步: 使用x后续处理

 

        案例1: 键盘录入两整数求和

        案例2: 键盘录入三整数求最大值

        案例3: 键盘录入一整数,判断奇偶

import java.util.Scanner;
public class ScannerDemo {
    public static void main(String[] args) {
        // 数据类型 变量名 = 变量值;  int a = 10;  String str = "abc"
        // 1. 键盘录入两整数求和, sc是一个变量名,变量表示的Scanner键盘录入类型
        // System.in : 表示Scanner类型获取的数据, 来源默认就是键盘输入
        Scanner sc = new Scanner(System.in);
        // 注意: 键盘录入数据功能都有阻塞效果,因此在输入数据之前给提示信息
        System.out.println("请输入第一个整数:");
        int x = sc.nextInt();

        System.out.println("请输入第二个整数:");

        int y = sc.nextInt();

        System.out.println("两数的和为:" + (x + y));

   
}

}
import java.util.Scanner;
public class ScannerTest {
    public static void main(String[] args) {
        // 案例2: 键盘录入三整数求最大值
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入第一个整数:");
        int first = sc.nextInt();
        System.out.println("请输入第二个整数:");
        int second = sc.nextInt();
        System.out.println("请输入第三个整数:");
        int third = sc.nextInt();
        // max表示三个数中的最大值
        int max = first >= second ? first : second;
        max = max >= third ? max : third;
        System.out.println("三个数最大值为:" + max);
    }
}

扩展Random类使用:

import java.util.Random;
public class RandomDemo {
    public static void main(String[] args) {
        /*
              1. Random类: 由JDK提供,来自于java.util包, 功能是可以生成一个指定范围内的随机数
              2. Random类使用步骤
                 1) 导包import java.util.Random; 声明Random所在具体路径
                 2) 创建出一个Random类型对象(对比Scanner):
                    Scanner sc = new Scanner(System.in);
                    Random ran = new Random();
                 3) 使用ran,表示Random类型,调用
                    nextInt(int number): 生成一个0-(number-1)之间的任意随机整数,[0,number),包含0数值但是不包含number
         */

        // 1. 生成1-100之间的任意随机数

        Random ran = new Random();

        int number = ran.nextInt(100) +
1;// (0-99) + 1

        System.out.println(number);

    }

}

 

三. 流程控制

(一)  流程控制概述

1.流程控制概念: 控制代码的执行顺序就是流程控制.

2.流程控制的分类:

        顺序结构: 代码从上到下,从左到右依次执行.

        分支结构: 根据条件选择执行路径

                          代码特点: 写得多,执行的少

                 语句实现: if条件语句三种格式,switch开关选择语句

        循环结构: 相同相似的代码逻辑在符合条件的情况下,可以多次反复的执行

                      代码特点: 写得少,执行的多

                 语句实现: for循环语句,while循环语句,do while循环语句,continue继续语                                             句,break终止语句,return返回语句.

(二)  分支结构之if条件语句

1.1 if语句的第一种格式

1.格式:

        if(布尔表达式) {

               语句体;

        }

2.说明:

        1)if,关键字,表示如果的含义

        2)if语句后面跟着的小括号,里面必须是boolean类型的值;计算结果为true或者false.

        3)语句体,可以是任意逻辑代码

3.执行流程:  

        1)计算布尔表达式的值,要么为true,要么为false

        2)如果计算结果为true,执行语句体

        3)如果计算结果为false,就不执行语句体

4.注意事项:

        1)小括号后面不要加分号,一般来说,有左大括号,就没有分号,有分号,就没有左大括号.

        2)如果if语句体只有一句代码,大括号可以省略,但是建议所有情况都加上大括号,不要省略.

 

        案例1: 某公司现在要给员工进行薪资调整, 工作年龄大于等于5年, 加薪3000元, 工龄不够5年的, 没有加薪

 

5.实际开发场景使用:

1. 数据验证: 例如客户注册页面, 需要注册信息, 后台需要验证这些注册信息是否符合一定规范

  if (姓名不符合规范){

       直接抛出错误提示信息,让代码停止;

}

 

if(...){

}

2. 金融产品中, 对于产品定价不同; 某一些公司产品销售需要有额外的加价, 因此在计算产品金额时候, 就需要进行验证

  if (产品属于A公司的){

     价格+5;

}

public class Demo01_If {
    public static void main(String[] args) {
        // 定义出员工基本薪资
        double salary = 10000;
        // 定义出员工工龄
        int workAge = 4;
        // 验证员工是否可以涨薪
        if (workAge >= 5){
            salary += 3000; // salary = salary + 3000;
        }

        System.out.println("员工工作了" + workAge + "年,目前薪资为:" + salary);
        
    }
}

1.2 if语句的第二种格式

 

1.格式:

        if (boolean类型条件表达式) {

               语句体1;

        } else { 

                 语句体2;

        }

2.执行流程:

        1)计算条件表达式的值,要么为true,要么为false

        2)如果条件表达式的值为true,执行语句体1

        3)如果条件表达式的值为false,执行语句体2

3.注意事项:

        1) else是关键字, 表示其他, 是除了if条件之外的所有其他

        2) if中的语句体1和else中的语句体2,一定会执行其中一个,不可能全执行或者全不执行.

 

        案例1: 某公司现在要给员工进行薪资调整,根据工龄决定涨薪级别

                         1)[0-5): 涨薪2000元

                         2)[5-10): 涨薪3000元

                         3)[10-15): 涨薪4000元

                         4)[15,以上): 涨薪5000元

public class Demo03_IfElseIf {
    public static void main(String[] args) {
        double salary = 10000;
        int workAge = 17;
        // 根据工作年限计算出员工涨薪的级别
        if(workAge < 0){
            System.out.println("工龄输入有误,无法涨薪");
        }else if (workAge >= 0 && workAge < 5){
            salary += 2000;
        }else if(workAge >= 5 && workAge < 10){
            salary += 3000;
        }else if(workAge >= 10 && workAge < 15){
            salary += 4000;
        }else {
            salary += 5000;
        }

        // 健壮性验证: 只有工龄正确的, 才会输出对应的数据结果
        if(workAge >= 0){
            System.out.println("员工工作了" + workAge + "年,目前薪资为:" + salary);
        }
    }
}

 

 

注意事项和优化

public class Demo04_IfElseIf注意事项 {
    public static void main(String[] args) {
        double salary = 10000;
        int workAge = 9;
        // 根据工作年限计算出员工涨薪级别
        if(workAge < 0){// false, 证明workAge >= 0
            System.out.println("工龄输入有误,无法涨薪");
        }else if (workAge < 5){// false, 证明workAge >= 5
            salary += 2000;
        }else if (workAge < 10){// false, 证明workAge >= 10
            salary += 3000;
        }else if (workAge < 15){// false, 证明workAge >= 15
            salary += 4000;
        }else if(workAge >= 15){
            salary += 5000;
        }

        // 健壮性验证: 只有工龄正确, 才会输出对应的数据结果
        if(workAge >= 0){
            System.out.println("员工工作了" + workAge + "年,目前薪资为:" + salary);
        }
    }
}

 

(三)  分支结构之switch开关语句

 

1.1 switch语法

1.switch: 表示英文中的开关,每个条件都像一扇门,开着的,就进门执行,否则就到下一扇门判断.

2.格式:

        switch (表达式) {

                 case 常量1:

                      语句体1;

                      break;

                 case 常量2:

                      语句体2;

                      break;

          

      case 常量n:

                      语句体n;

                      break;

               default:

                      语句体n+1;

        }

3.关键字解释:

        switch: 开关;

        case: 情况;

        break: 破坏,退出,结束;

     default: 默认;

4.执行流程:

        1)计算switch小括号中表达式的值,分别和case后的各个常量值匹配

       2)如果和常量1匹配,那么就执行语句体1,执行break,switch语句结束

       3)如果和常量1不匹配,那么就判断是否和常量2匹配,如果匹配就执行语句体2,执行break,switch语句结束

    4)以此类推,如果常量1~常量n全都没有和表达式的值匹配,那么就执行default中的内容,switch语句结束

 

 

 

        案例1: 键盘录入一个整数,用于进行星期匹配,数据范围1-7,对应匹配星期一到星期天,如果不是1-7范围,那么报出数据错误提示信息

 

import java.util.Scanner;
public class Demo05_SwitchCase {
    public static void main(String[] args) {
        //案例1: 键盘录入一个整数,用于进行星期匹配,数据范围1-7,对应匹配星期一到星期天,如果不是1-7范围,那么报出数据错误提示信息
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入1-7的数据,用于匹配星期");
        int weekday = sc.nextInt();
        // 验证输入的数据对应匹配的星期
        switch(weekday) {
            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("输入数据有误");
        }
    }
}

 

1.2 switch语句的注意事项

1.switch小括号表达式数据类型:

        Jdk1.5之前: byte,short,char,int

        Jdk1.5: 枚举类型

        Jdk7: String

2.case后面只能跟常量,不能跟变量

3.每个case语句体后面, 要跟上一个break语句,否则就无法结束switch语句,并且发生case穿透.

      case穿透的利用: 多个case情况如果是相同的执行逻辑,可以在最后一个case语句后再使用break,在switch语句中,如果case的后面不写break,也就不会再判断下一个case的值,直接向后寻找一切可执行语句运行,直到遇到break,或者整体switch结束.

4.default语句: 可以写也可以不写.如果不写,就有可能一个语句都执行不到,建议把default语句加上.

5.default语句可以写在任意位置,无论写在什么位置,都是最后去匹配,建议把default语句写在最后.

6.switch语句结束的条件: 遇到break语句; 遇到switch语句执行全部结束.

 

案例1: 键盘录入一个整数,用于进行工作日与休息日匹配,数据范围1-5,输出工作日;

       数据范围6-7输出休息日; 其余数据报出”数据有误”提示信息

 

案例2: 键盘录入一个月份,输出这个月份对应的季节345月是春季,678是夏季,9、10、11秋季,12、1、2冬季,其他数字,没有任何季节,提示录入错误

import java.util.Scanner;

public class Demo06_Switch注意事项 {
    public static void main(String[] args) {
       /* 案例1: 键盘录入一个整数,用于进行工作日与休息日匹配,数据范围1-5,输出工作日;
        数据范围6-7输出休息日; 其余数据报出”数据有误”提示信息*/
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入1-7数据,匹配工作日和休息日");
        int weekday = sc.nextInt();
        /*switch(weekday){
            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("数据有误");

        }*/


        // 穿透性

        /*switch(weekday){// weekday = 2

            case 1:

            case 2:

            case 3:

            case 4:

            case 5:

                System.out.println("工作日-----");

                //break;

            case 6:

            case 7:

                System.out.println("休息日-----");

                //break;

            default:

                System.out.println("数据有误-----");

        }*/


        // switch中的default逻辑可以没有

        // switch中的default就是与ifelse中的else同等存在原理

        // 如果没有default有可能所有的case全部匹配失败,导致分支结构没有选择

        switch(weekday){// weekday = 2

            case 1:

            case 2:

            case 3:

            case 4:

            case 5:
                System.out.println("工作日-----");

                break;

            case 6:

            case 7:

                System.out.println("休息日-----");

                break;

        }

    }

}