第三讲

Java语言基础第三讲

一.逻辑运算符的基本用法

  • 逻辑运算符的种类—-逻辑与&,逻辑或|,逻辑异或^,逻辑非!,短路与&&,短路或||.
  • 逻辑运算符用时的基本注意事项:
    • 逻辑运算符一般用来连接Boolean类型的表达式或者值.
    • 表达式: 就是用运算符把常量或者变量连接起来的符合java语法的句子.
    • 算术表达式: a + b
    • 比较(条件)表达式:a == b
  • 逻辑运算符的基本用法演示

    • 逻辑与 & :是并且,and的意思.遇false则false.
    • 逻辑或 | :是或者,or的意思.遇true则true.
    • 逻辑异或 ^ :两边相同则false,两边不同则true.
    • 逻辑非 ! :非true则false,非false则true,偶数个非不改变本身.

      class Operator_1 {
          public static void main(String[] args) {
          int a = 10;
          int b = 20;
          int c = 30;
          //逻辑与 & ,是并且,and的意思.
              System.out.println(a < b & b < c);      //true & true = true
              System.out.println(a > b & b < c);      //false & true = false
              System.out.println(a < b & b > c);      //true & false = false
              System.out.println(a > b & b > c);      //false & false = false
          //结论:遇false则false.
              System.out.println("-------------------------");
          //逻辑或 | ,是或者,or的意思.
              System.out.println(a < b | b < c);      //true | true = true
              System.out.println(a > b | b < c);      //false | true = true
              System.out.println(a < b | b > c);      //true | false = true
              System.out.println(a > b | b > c);      //false | false = false
          //结论:遇true则true.
              System.out.println("-------------------------");
          //逻辑异或 ^ .
              System.out.println(a < b ^ b < c);      //true ^ true = false
              System.out.println(a > b ^ b < c);      //false ^ true = true
              System.out.println(a < b ^ b > c);      //true ^ false = true
              System.out.println(a > b ^ b > c);      //false ^ false = false
          //结论:两边相同则false,两边不同则true.
              System.out.println("-------------------------");
          //逻辑非 ! .
              System.out.println(!true);          //非true即false
              System.out.println(!!true);         //非非true即true
          //结论:非true则false,非false则true,偶数个非不改变本身.
          }
      }
      
  • &&与&的区别

    • 最终结果一样
    • &&具有短路效果,左边是false,右边就不执行.

      class Operator_1 {
          public static void main(String[] args) {
          int a = 10;
          int b = 20;
          int c = 30;
              System.out.println(a < b && b < c);     //true && true = true
              System.out.println(a > b && b < c);     //false && true = false
              System.out.println(a < b && b > c);     //true && false = false
              System.out.println(a > b && b > c);     //false && false = false
      /*&&和&的区别
          a.最终结果一样
          b.&&具有短路效果,左边是false,右边就不执行.*/
              System.out.println(a < b && b < c);     //true && true = true
              System.out.println(a > b && b < c);     //false && true = false
              System.out.println(a < b && b > c);     //true && false = false
              System.out.println(a > b && b > c);     //false && false = false
      
              int x = 3;
              int y = 4;
              //System.out.println(++x == 3 & ++y == 4);          //遇false则false
              //System.out.println("x = " + x + ",y = " + y);     //x = 4,y = 5
              System.out.println(++x == 3 && ++y == 4);           //左边是false,右边不执行,左边是true,右边一定要执行.
              System.out.println("x = " + x + ",y = " + y);       //x = 4,y = 4
              System.out.println("-------------------------");
      /*||与|的区别
          a.最终结果一样
          b.||具有短路效果,左边是true,右边就不执行.*/
              System.out.println(a < b || b < c);     //true || true = true
              System.out.println(a > b || b < c);     //false || true = true
              System.out.println(a < b || b > c);     //true || false = true
              System.out.println(a > b || b > c);     //false || false = false
      
      
              System.out.println(++x == 3 | ++y == 4);            //遇true则true
              System.out.println("x = " + x + ",y = " + y);       //x = 4,y = 5
              System.out.println(++x == 3 || ++y == 4);           //左边是true,右边不执行,左边是false,右边一定要执行.
              System.out.println("x = " + x + ",y = " + y);       //x = 4,y = 5
          }
      }  
      

二. 位运算符的基本方法

  • 位运算符的种类 —-位与&,位或|,位异或^,取反~,向右移>>,五符号>>>向左移<<.
  • 位运算符的用法1

    • 位与&:有0则0;
    • 位或|:有1则1;
    • 位异或^:相同则0,不同则1;
    • 取反~ :按位取反.

       class Operator_2 {
          public static void main(String[] args) {
          /*
          * 位与&:有0则0;
          * 位或|:有1则1;
          * 位异或^:相同则0,不同则1;
          * 取反~  :按位取反.
          */
              System.out.println(7 & 3);      //输出结果3
              System.out.println(7 | 3);      //7
              System.out.println(7 ^ 3);      //4
              System.out.println(~7);            //-8
      
      //**位异或运算符的特点----一个数据对另一个数据异或两次,该数本身不变.**
      
              System.out.println(6 ^ 3 ^ 3);      //6
              System.out.println(6 ^ 3 ^ 6);      //3
      
      //练习题:实现两整数变量间的转换
      
          int x = 3;
          int y = 6;
      
      //需用第三方变量 (软件开发中建议常用方法)
          int temp;
          temp = x;
          x = y;
          y = temp;
              System.out.println("x = " + x + ",y = " + y);
              System.out.println("---------------");
      //不用定义第三方变量.有弊端,容易超出int的取值范围.
          x = x + y;      //3 + 6 = 9
          y = x - y;      //9 - 6 = 3
          x = x - y;      //9 - 3 = 6
              System.out.println("x = " + x + ",y = " + y);
              System.out.println("---------------");
      //不用定义第三方变量.
          x = x ^ y;      //3 ^ 6
          y = x ^ y;      //3 ^ 6 ^ 6 
          x = y ^ x;      //3 ^ 6 ^ 3
              System.out.println("x = " + x + ",y = " + y);
          }
      }
      
  • 位运算符的用法2

    • 左移<<:左边最高位丢弃,右边补齐0;
    • 右移>>:最高位是0,左边补齐0,最高位是1,左边补齐1;
    • 无符号右移>>>:无论最高位是1还是0,左边补齐0.

      class Operator_3 {
          public static void main(String[] args) {
      
          //左移,向左移动几位就是乘以2的几次幂.
              System.out.println(8<<1);       //16
              System.out.println(8<<2);       //32
      
          //右移,向右移动几位就是除以2的几次幂.
              System.out.println(8>>1);       //4
              System.out.println(8>>2);       //2
          }
      }
      

三.三元运算符的基本算法

  • 三元运算符的基本格式—-(关系表达式) ? 表达式1 : 表达式2;

    class Operator_4 {
        public static void main(String[] args) {
    
    //获取两个数的最大值
        int x1 = 10;
        int y1 = 20;
        int max;
        max = (x1 > y1) ? x1 : y1;      //输出结果max = 20
            System.out.println("max = " + max);
    
    //比较两个整数是否相同
        int a = 10;
        int b = 20;
        boolean c = (a == b) ? true : false;
        boolean c1 = (a == b);          //false
            System.out.println("c = " + c);
            System.out.println("c1 = " + c1);
    
    //求三个整数中的最大值
        int x = 10;
        int y = 20;
        int z = 30;
        int temp = (x > y) ? x : y;
        int max1 = (temp > z) ? temp : z;       //max1 = 30
            System.out.println("max1 = " + max1);
        }
    }
    

四.键盘录入的基本格式

  • 为什么要用键盘录入数据
    • 为了让程序的数据符合开发的数据
    • 让程序更灵活一些
  • 实现键盘录入的基本格式

    • 导包 格式:import java.util.Scanner;(位置在class上面)
    • 创建键盘录入 格式:Scanner sc = new Scanner(System.in);
    • 通过对象获取数据 格式:int x = nestInt();

      import java.util.Scanner;
      class Scanner_1 {
          public static void main(String[] args) {
      
          //录入一个整数
              Scanner sc = new Scanner(System.in);            //创建键盘录入对象
              System.out.println("请输入一个整数");
              int x = sc.nextInt();               //将键盘录入的数据存储在X中
              System.out.println("x = " + x);
              System.out.println("------------------- " );
      
          //录入两个整数
              //Scanner sc = new Scanner(System.in);          //创建键盘录入对象
              System.out.println("请输入一个整数");
              int y = sc.nextInt();               //将键盘录入的数据存储在y中
              System.out.println("y = " + y);
      
              System.out.println("请输入第二个整数");         //创建键盘录入对象
              int z = sc.nextInt();
              System.out.println("z = " + z);     //将键盘录入的数据存储在z中
          }
      }
      
  • 练习题

    • 键盘录入练习一:键盘录入两个数据,并对这两个数据求和,然后输出其结果;
    • 键盘录入练习二:键盘录入两个数据,然后获取这两个数中的最大值.
    • 键盘录入练习三:键盘录入两个数据,比较这两个数据是否相等.
    • 键盘录入练习四:键盘录入三个数据,然后获取这三个数据中的最大值.
    • import java.util.Scanner;
      class Test_1 {              //导入包中的类Scanner
          public static void main(String[] args) {
              Scanner sc = new Scanner(System.in);            //创建键盘录入对象
              System.out.println("输入第一个整数");
              int x = sc.nextInt();               //将键盘录入的数据存储在x中
      
              System.out.println("输入第二个整数");
              int y = sc.nextInt();               //将键盘录入的数据存储在y中
      
              System.out.println("输入第三个整数");
              int w = sc.nextInt();               //将键盘录入的数据存储在w中
      
          //练习一
              int z = x + y;                      //将x和y求和
              System.out.println("z = " + z);
      
          //练习二
              int max = (x > y) ? x : y;          //比较x和y值的大小
              System.out.println("max = " + max);
      
          //练习三
              boolean q = (x == y);               //比较两个数值是否相等
              System.out.println("q = " + q);
      
          //练习四       `
      
              int temp = (x > y) ? x : y;         //比较三个数值取最大值
              int max2 = (temp > w) ? temp : w;
              System.out.println("max2 = " + max2);
          }
      }
      

五.顺序结构语句

  • 什么是流程控制语句—-可以控制程序的执行流程.
  • 流程控制语句的分类
    • 顺序结构
    • 选择结构
    • 循环结构
  • 执行流程—-从上往下,依次执行.
  • /
  • 顺序结构格式:按顺序依次输出.

    class Order {       //Order顺序
        public static void main(String[] args) {
            System.out.println("Hello World1111!");
            System.out.println("Hello World4444!");
            System.out.println("Hello World2222!");
            System.out.println("Hello World3333!");
        }
    }
    
  • 选择结构 if 语句格式及其使用

  • 选择结构的分类
    • if语句
    • switch语句
  • if 语句注意事项
    • 比较表达式无论是复杂简单,输出结果必须是Boolean类型;
    • if语句控制的语句体如果是一条语句,大括号可以省略,如果是多条语句,就不能省略,(建议永远都不要省略);
    • 一般来说,有左大括号就没有分号,有分号就没有左大括号.
  • if 语句的几种格式

    格式一:    if(比较表达式) {
                语句体;
                }
    
  • 执行流程

    • 先计算比较表达式的值,看其返回值是true还是false;
    • 如果是true,就执行语句体;
    • 如果是false就不执行语句体.

      格式二:        if(条件表达式){
                      语句体1;
                  }else {
                      语句体2;
                  }
      
  • 执行流程
    • 先计算比较表达式的值,看其返回值是true还是false;
    • 如果是true,就执行语句体1;
    • 如果是false,就执行语句体2.
  • 注意:else后面是没有条件表达式的,只有 if 后面有.

    格式三:        if(比较表达式1){
                    语句体1;
                }else if(比较条件式2) {
                    语句体2;
                }else if(比较表达式3) {
                    语句体3;
                }
                ....        
                else {
                    语句体n+1;
                }
    
  • 执行流程
    • 先计算比较表达式1的值,看其返回值是true还是false;
    • 如果是true,就执行语句体1, if 语句结束;
    • 如果是false,接着计算比较表达式2的值,看其返回值;
    • 如果是true,就执行语句体2,if 语句结束;
    • 如果是false,就就接着计算比较表达式3的值,看其返回值;
    • 如果都是false,就执行语句体n+1.
  • 注意:最后一个else可以省略,但是建议不要省略,可以对其范围外的错误值进行提示.

  • 格式一演示:

    class Demo_If1 {
        public static void main(String[] args) {
            int age = 17;
            if (age < 18) {
                System.out.println("未成年人禁止入内");
            }
                System.out.println("主要看年龄,走吧");
        }
    }
    
  • 格式二演示:

    class Demo_If2 {
        public static void main(String[] args) {
            int num = 1;
            if (num == 1) {
                System.out.println("美容女士请进");
            }else{
                System.out.println("男士止步");
            }
        }
    }
    
  • 格式三演示;

    class Demo_If3 {
        public static void main(String[] args) {
            int num = 2;
            if (num == 1) {
                System.out.println("美容女士请进");
            }else if (num == 0) {
                System.out.println("男士止步");
            }else if (num == 2) {
                System.out.println("宠物狗禁止入内");  
            }else {
                System.out.println("无法识别性别");
            }
        }
    }
    
  • 案例演示

    • 一:获取两个数据中的最大值;

      class Test_If1 {
          public static void main(String[] args) {
              int x = 5;
              int y = 10;
              int z;
              if (x > y) {
                  z = x;
              }
              else {
                  z = y;
              }
                  System.out.println(y);
          }
      }
      

      二:判断一个数据是奇数还是偶数.

  • 判断条件:x % 2 == 0 或者 (x & 1) == 1.

        class Test_If2 {
            public static void main(String[] args) {
                int x = 10;
                if (x % 2 == 0) {       // 判断条件也可以是 (x & 1) == 1
                    System.out.println(x + "是一个偶数");
                }else {
                    System.out.println(x + "是一个奇数");
                }
            }
        }
    
  • if 语句的格式二与三元运算符的相互转换问题

    • 两者的区别—-三元运算符能实现的,都可以用if 语句实现,反之不成立;
    • 什么时候 if 能实现的不能用三元实现—-当 if 语句操作的是一个输出语句时就不能,原因是三元运算符是一个运算符,运算完成后就应该有一个结果,而不是一个输出语句.
  • 用 if 语句格式二和三元运算符输出同一结果

        class Test_If3 {
            public static void main(String[] args) {
    
            //if 语句结构
                int x = 10;
                int y = 20;
                int z;
                if (x > y){ 
                    z = x;
                    System.out.println(x + "是最大值");
                }else {
                    z = y;
                    System.out.println(y + "是最大值");
                }
                    System.out.println(z);
    
            //三元运算符结构
                int a = 10;
                int b = 20;
                int c = (a > b) ? a : b;
                System.out.println(c1);
            }
        }
    
  • 选择结构 if 语句格式三练习

    • 练习一:键盘录入一个成绩,判断并输出成绩的等级,90-100优秀;80-89良好;70-79中等;60-69及格;0-59差.

      //练习一
      
      import java.util.Scanner;           //导入包中的类
      class Test_If4 {
          public static void main(String[] args) {
              Scanner sc = new Scanner(System.in);            //创建键盘录入对象
              System.out.println("请输入一名学生成绩");
              int x = sc.nextInt();       //将键盘录入的数据存储在x中
              if (x > 90 && x < 100){
                  System.out.println("优秀");
              }else if (x > 80 && x < 89){
                  System.out.println("良好");
              }else if (x > 70 && x < 79){
                  System.out.println("中等");
              }else if (x > 60 && x < 69){
                  System.out.println("及格");
              }else if (x > 0 && x < 59){
                  System.out.println("差");
              }else {
                  System.out.println("输入成绩有误");
              }
          }
      }
      
    • 练习二:键盘录入X的值,计算出y的值并输出,x>=3,y=2*x+1;-1

七.选择结构中switch语句的格式及其解释

  • switch 语句的格式

    switch (表达式) {
    case 值1:
        语句体1;
    break;
    case 值2:
        语句体2;
    break;
    ...
        default:
        语句体n + 1;
    break;
    }
    
  • 执行流程

    • 先计算表达式的值
    • 然后和case后面的值进行匹配,如果有就执行后面对应的语句,如果没有就执行default后面控制的语句.

      //switch格式练习
      
      class Demo_switch1 {
          public static void main(String[] args) {
              String name = "狗蛋";
              String gender = "男士";
              switch (gender) {
              case "男士":
              System.out.println(name + "是一位" + gender + "爱好女");
              break;
              case "女士":
              System.out.println(name + "是一位" + gender + "爱好男");
              break;
              default :
              System.out.println(name + "是一位" + gender + "爱好狗");
              }
          }
      }
      
  • switch语句的格式解释

    • 基本数据类型可以接受byte,short,char,int.
    • 应用数据类型可以接受string字符串(JDK1.7),枚举(JDK1.5).
  • 注意事项

    • case后面只能是常量,不能是变量,而且多个case后面的值不能出现相同的;
    • default可以省略,但是不建议,因为它可以对不正确的量给与提示.
    • case可以把值固定.
    • break最后一个可以省略,其他的最好不要省略,一旦省略容易出现case穿透.
    • switch语句的结束条件是遇到break就结束了或者执行到switch的有大括号就结束.
    • default不一定要在最后,可以再任意位置,但建议在最后.
  • 选择结构switch语句的练习题

    • 给定一个整数值,输出对应的星期几.

       //给定一个整数值,输出对应的星期几.
      
      class Test_switch1 {
          public static void main(String[] args) {
              int week = 8;
              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("没有对应的星期");
              }
          }
      }
      
  • 看程序,写结果.

    //看程序,写结果.
    
    class Test_switch2 {
        public static void main(String[] args) {
            int x = 2;
            int y = 3;
            switch (x) {
            case 2:
                y++;
            break;
            case 3:
                y++;
            break;
            case 4:
                y++;
            break;
            default:
                y++;            //输出结果4
            }
            System .out.println("y = " + y);
        }
    }
    
    //看程序,写结果.
            int x = 2;
            int y = 3;
            switch (x) {        //switch语句的结束条件是遇到break就结束了或者执行到switch的有大括号就结束.
                default:
                y++;
                case 3:
                y++;
                case 4:
                y++;            //输出结果6
            }
                System .out.println("y = " + y);
        }
    }
    
  • 选择结构 if 语句和switch语句的区别
    • switch语句建议判断固定值时使用,
    • if语句建议判断区间或范围时使用 ,
  • 练习 (用if和switch语句分别实现)

    • 键盘录入月份,输出对应的季节.

          /* 键盘录入月份,输出对应的季节.
              3,4,5春天;
              6,7,8夏天;
              9,10,11秋天;
              12,1,2冬天*/
      
      import java.util.Scanner;               //导出包中的类
      class Test_IfSwitch {
          public static void main(String[] args) {
              Scanner sc = new Scanner(System.in);        //创建键盘录入对象
              System.out.println("请输入一个月份值");
              int mouth = sc.nextInt();           //将创建的数据存储在x中
      
          //if结构语句
      
              if (mouth >= 3 && mouth <= 5) {
                  System.out.println(x + "月是春天");
              }else if (mouth >= 6 && mouth <= 8) {
                  System.out.println(x + "月是夏天");
              }else if (mouth >= 9 && mouth <= 11) {
                  System.out.println(x + "月是秋天");
              }else if (mouth >= 3 && mouth <= 5) {
                  System.out.println(x + "月是冬天");
              }else if(mouth > 12 || mouth < 1){
                  System.out.println("没有对应的月份");
              }
          }
      }
      
      
          //switch结构语句
      
              switch (mouth) {
              case 3:
              case 4:
              case 5:
                  System.out.println(mouth + "月是春天");
              break;
              case 6:
              case 7:
              case 8:
                  System.out.println(mouth + "月是夏天");
              break;
              case 9:
              case 10:
              case 11:
                  System.out.println(mouth + "月是秋天");
              break;
              case 12:
              case 1:
              case 2:
                  System.out.println(mouth + "月是冬天");
              break;
              default:
                  System.out.println("没有对应的月份");
              }
          }
      }
      
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值