Day03

一. 位运算符(了解)

  1. 定义

    • 对数值进行二进制的位运算
    • 在位运算中 0 为假, 1为真
  2. 分类

    • & : 有0则为0
    • | : 有1则为1
    • ^ : 相同为0 , 不同为1
    • ~ : 按位取反
    • >> : 有符号右移(进行2的倍数的除法时速度非常快)
    • << : 有符号左移
    • >>> : 无符号右移
  3. 演示

    public static void main(String[] args) {
     
     int a = 10; //二进制表现为 1010
     int b = 5;  //二进制表现为 0101
     
     System.out.println(a&b); 
     
     System.out.println(a|b);
     
     System.out.println(a^b);
     
     System.out.println(~a);
     
     System.out.println(a>>1);//右移一位 相当于除以2
     
     System.out.println(a<<1);//左移一位,相当于乘以2
     
     System.out.println(a>>>1);//无符号位移,缺失的首位补0
     
    }
    
  4. 注意事项

    • 一个数异或同一个数两次,结果还是本身
  5. 测试题

    • 不借助第三个变量的前提下交换两个整数变量的值
public class TestDemo{
    public static void main(String[] args){
         //采用加法运算的方法
          int a = 1;
          int b = 2;
          a = a + b;
          b = a - b;//等同于b=a+b-b;
          a = a - b;//等同于a=a+b-(a+b-b);
          //采用按位异或运算的方法
          int a = 1;
          int b = 2;
          a = a ^ b;
          b = a ^ b;//等同于a^b^b;
          a = a ^ b;//等同于a^(a^b);
        }
}

二. 三元运算符

  1. 格式

    • boolean ? 结果1 : 结果2;
    • boolean为true,返回结果1,否则返回结果2
  2. 演示

    • 获取两个数中最大的值

      public static void main(String[] args) {
         int a = 10;
         int b = 20;
         //如果a大于b的话,结果为真,就返回a
         int max = a > b ? a : b;    
         System.out.println(max);
      }
      

三. 从键盘获取数据

  1. 步骤

    • 导入 java.util.Scanner;
    • 创建Scanner对象 Scanner sc = new Scanner(System.in);
    • 调用nextInt()方法获取一个整数 sc.nextInt();
  2. 演示

    //导入类
    import java.util.Scanner;
    
    public class TestDemo {
     
     public static void main(String[] args) {
         //创建键盘录入对象,打开键盘通道
         Scanner sc = new Scanner(System.in);
         //调用方法获取一个整数
         int i = sc.nextInt();
         System.out.println(i);
     }
    }
    

四. 控制语句

  1. 定义
    • 一个程序,想要更加健壮, 就必须能够应对各种各样的状况, 根据实际情况来判定直接结果
    • 所以, 对于程序也应该是根据不同的情况来执行不同的顺序和语句
    • 控制语句就可以控制流程的走向和顺序
  2. 分类
    • 顺序结构
    • 选择结构
    • 循环结构

五. 顺序结构

  1. 定义

    • 按照生活中的习惯, 从上往下,依次执行
  2. 演示

    public static void main(String[] args) {
     //程序会从上往下依次执行
     System.out.println("第一句话");
     
     System.out.println("第二句话");
     
     System.out.println("第三句话");
     
    }
    

六. 选择结构(判断结构)

  1. 定义
    • 可以控制部分语句执行,或跳过一部分语句
  2. 分类
    • if 语句
    • switch语句

七. if 语句格式一

  1. 格式

    if(boolean){
     //执行语句
    }
    
  2. 执行流程

    • 先计算if关键字后面的表达式, 看其返回值是true还是false
    • 如果是true ,就执行后面大括号中的代码
    • 如果是false, 就不执行
  3. 演示

    public static void main(String[] args) {
     
     int a = 1;
     
     if(a>0){
         System.out.println("语句体执行了");
     }
     
    }
    
  4. 注意事项

    • if 后面的小括号里面无论写什么, 结果都必须是boolean值
    • if 语句控制的语句体如果是一条语句,大括号可以省略, 如果是多条语句, 就不能省略,建议永远不要省略
    • 一般来说, 有左大括号就没有分号, 有分号,就没有左大括号
  5. 测试题

    • 只有年龄超过18岁的学生才能玩游戏, 现在编一个程序,来判断一个学生是否可以玩游戏
public class TestDemo02{
    public static void main(String[] args) {
        int age = 22;
        if(age>18){
            System.out.println("pubg");
        }
        else if (age>12) {
            System.out.println("LOL");
        }
        else if (age>6) {
            System.out.println("honor of king");
        }
        else System.out.println("xuandouxiaoq");
    }
}

八. if 语句格式二

  1. 格式

    if(boolean){
     //语句体1
    }else{
     //语句体2
    }
    
  2. 执行流程

    • 首先计算if后面小括号内的表达式的值, 看其返回值是true还是false
    • 如果是true , 就执行语句体1
    • 如果是false, 就执行语句体2
  3. 案例演示

    public static void main(String[] args) {
     
     int i = 1;
     if(i>=18){
         System.out.println("终于可以玩游戏了");
     }else{
         System.out.println("哎... 再等等吧");
     }
     
    }
    
  4. 注意事项

    • else 后面是没有表达式的, 只有if后面有
    • 如果语句体只有一句话, 可以省略大括号,建议不要省略
    • 三元运算符就是这种格式的简写形式,三元运算符可以实现的,这种格式都可以,反之不行
  5. 测试题

    • 妻子嘱咐程序猿丈夫回家的时候买10苹果, 如果碰到卖西瓜的买一个,编程模拟场景
  6. 测试题

    • 如果成绩大于90 ,如果是男生送一个女朋友 , 如果是女生送一个吴彦祖

九. if 语句格式三

  1. 格式

    if(boolean){
     //语句体1
    }else if(boolean){
     //语句体2
    }else{
     //语句体3
    } 
    
    
  2. 执行流程

    • 首先计算if 后面括号内的表达式, 看其返回值结果
    • 如果是true就执行语句体1, if语句结束
    • 如果是false , 就执行下一个else if后面括号中的表达式,看其结果
    • 如果是true ,就执行语句体2
    • 如果是false , 就接着判断下一个else if后面表达式的结果
    • 以此类推, 直到最后执行else语句结束
    • 如果中途有一个if或者else if 后的括号判断结果是true ,则之后的代码都不再执行
  3. 注意事项

    • 最后一个else可以省略, 但建议不要省略, 可以对有效值范围外的错误值进行提示
  4. 演示

    public static void main(String[] args) {
     
     int i = 10;
     if(i>18){
         System.out.println("吃鸡");
     }else if(i>10){
         System.out.println("LOL");
     }else if(i>3){
         System.out.println("王者农药");
     }else{
         System.out.println("泡妞");
     }
    }
    
    
  5. 测试题

    • 从键盘录入一个学生的成绩, 判断其成绩的等级

      100 学神

      90-99 学霸

      80-89 优

      70-79 良

      60-69 及格

      0-59 再接再厉

import java.util.Scanner;
public class TestDemo03{
    public static void main(String[] args) {
        System.out.println("please input your score:");
        Scanner in = new Scanner(System.in);
        int score = in.nextInt();
        if(score==100){
            System.out.println("ヾ(≧▽≦*)oヾ");
        }
        else if (score>=90&&score<100) {
            System.out.println("φ(* ̄0 ̄)");
        }
        else if (score>=80&&score<90) {
            System.out.println("[]~( ̄▽ ̄)~*");
        }
        else if (score>=70&&score<100) {
            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("rua~");
    }
}

十. switch 语句

  1. 格式

    switch(值){
     case 值1:    
         //语句体1;
         break;
     case 值2:        
         //语句体2;
         break;
     //......
     default:
         //语句体3;
         break;
    }
    
    
  2. 执行流程

    • 先看switch括号中的值

    • 然后和case后面的值匹配, 如果有就执行这个case后面的语句, 否则执行default 控制的语句

  3. 注意事项

    • case后面只能是常量, 不能是变量, 多个case后面不能出现相同的值
    • switch后面的值的类型只能是byte, short ,int ,字符, 字符串 , 枚举
    • 结束条件: 执行到break , 或者代码运行完毕结束,如果一直遇不到break就会一直执行
    • defautl 可以省略, 但是建议不要省略
  4. 演示

    public static void main(String[] args) {
     //输入数值,打印对象的星期数
     int week = 5;
     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.print("您的输入有误");
             break;
     }
     
    }
    
    
  5. case穿透

    • 当程序执行某个case后的代码,但是没有遇到break的时候, 就会一直执行下面的所有可执行的语句
    public static void main(String[] args) {
     
     int week = 1;
     switch (week) {
         case 1:
             System.out.println("语句1......");
             break;
         case 2:
             System.out.println("语句1......");
             break;
         case 3:
             System.out.println("语句1......");
             break;
         default:
             System.out.print("其他情况");
             break;
     }
    }
    
    
  6. 测试题

    • 使用switch语句改写判断学生成绩的等级
import java.util.Scanner;
public class TestDemo05{
    public static void main(String[] args) {
        System.out.println("please input your score:");
        Scanner in = new Scanner(System.in);
        int score = in.nextInt();
        switch(score/10){
            case 10:
                System.out.println("...");
                break;
            case 9:
                System.out.println("...");
                break;
            case 8:
                System.out.println("...");
                break;
            case 7:
                System.out.println("...");
                break;
            case 6:
                System.out.println("...");
                break;
            case 5:
            case 4:
            case 3:
            case 2:
            case 1:
            case 0:
                System.out.println("...");
                break;
            default:
                System.out.println("data Error");
                break;
        }
    }
}
  1. 测试题

    • 判断 春夏秋冬 打印输出 春天 春暖花开 夏天 夏天打盹 秋天 秋高气爽 冬天 冬眠
import java.util.Scanner;
public class TestDemo04{
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        System.out.println("please input season");
        String str = in.next();
        switch(str){
            case "spring":
                System.out.println("spring is suitable to zzzzz");
                break;
            case "summer":
                System.out.println("summer is suitable to zzzzz");
                break;
            case "autumn":
                System.out.println("autumn is suitable to zzzzz");
                break;
            case "winter":
                System.out.println("winter is suitable to zzzzz");
                break;
            default:
                System.out.println("I like sleeping");
                break;
        }
    }
}
  1. 测试题

    • 利用switch实现一个计算器操作
      • 第一次输入一个整数
      • 第二次输入一个运算符
      • 第三次输入整数
import java.util.Scanner;
public class TestDemo06{
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        System.out.println("please input first integer:");
        int a = in.nextInt();
        System.out.println("please input the operator:(+ - * /)");
        String str = in.next();
        System.out.println("please input second integer:");
        int b = in.nextInt();
        switch(str){
            case "+":
                System.out.println((a+b));
                break;
            case "-":
                System.out.println((a-b));
                break;
            case "*":
                System.out.println((a*b));
                break;
            case "/":
                System.out.println((a/b));
                break;
            default:
                System.out.println("operator is not permitive!");
                break;
        }
    }
}

总结:

  1. 位运算

    • ^ : 一个数异或另一个数两次,结果还是自己
    • >>n : 相当于除以 2 的n次方
  2. 三元运算符

    • boolean? 结果1:结果2
    • if else的简写形式
  3. 键盘录入

    • 导包
    • 和键盘建立连接
    • 调用方法获取数据
  4. 控制语句

    • 顺序结构
    • 选择结构
    • 循环结构
  5. if语句

    if(boolean){
        
    }
    
    
    if(boolean){
        
    }else{
        
    }
    
    
    if(boolean){
        
    }else if(boolean){
        
    }....
    else{
        
    }
    
    
  6. switch 语句

    • 可以接收的值 : int String 枚举
    • case穿透 : 执行没有碰到break,会继续往下执行 ,直到碰到break或碰到右大括号
    • case后面的值不能重复

作业

  1. 第一题

    • 饭店里面有五道菜, 黄花鱼 200块, 烤鸭 100块, 红烧肉 60块, 小炒肉 40块, 白水豆腐 10块
    • 一个客人进了饭店, 根据身上的钱来决定最好能吃哪道菜 , 编程模拟
  2. 第二题

    • 从键盘接收一个名次(int) 使用switch-case作如下分支
      名次为1 奖IPHONExs Max
      名次为2 奖IPHONE8
      名次为3 奖IPHONE7
      名次为 4 奖IPHONE6
      其它名次 努力吧,少年
  3. 第三题

    • 编写程序,判断给定的某个年份是否是闰年
      闰年的判断规则如下:

        (1)若某个年份能被4整除但不能被100整除,则是闰年。
        (2)若某个年份能被400整除,则也是闰年。
      
  4. 扩展题

    • 编程实现已知某人的工资(要求输入),求他应该缴纳的个人所得税以及最后得到的工资。

      个人所得税计算方法计算方法 :
      ​ 全月应纳税所得额 =工资薪金所得-3500
      ​ 应纳税额 = 应纳税所得额 *税率-速算扣除数
      ​ 级数 全月应纳税所得额 税率(%) 速算扣除数
      ​ 1 不超过500元的 5 0
      ​ 2 超过500元至2000元的部分 10 25
      ​ 3 超过2000元至5000元的部分 15 125
      ​ 4 超过5000元至20000元的部分 20 375
      ​ 5 超过20000元至40000元的部分 25 1375
      ​ 6 超过40000元至60000元的部分 30 3375
      ​ 7 超过60000元至80000元的部分 35 6375
      ​ 8 超过80000元至100000元的部分 40 10375
      ​ 9 超过100000元的部分 45 15375

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,928评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,192评论 3 387
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,468评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,186评论 1 286
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,295评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,374评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,403评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,186评论 0 269
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,610评论 1 306
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,906评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,075评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,755评论 4 337
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,393评论 3 320
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,079评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,313评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,934评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,963评论 2 351

推荐阅读更多精彩内容

  • 1 顺序语句 语句:使用分号分隔的代码称作为一个语句。 注意:没有写任何代码只是一个分号的时候,也是一条语句,...
    哈哈哎呦喂阅读 380评论 0 0
  • Java经典问题算法大全 /*【程序1】 题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子...
    赵宇_阿特奇阅读 1,855评论 0 2
  • Day01 class 例子{ public static void main(String[] args){ ...
    周书达阅读 1,027评论 0 0
  • 03.01_Java语言基础(逻辑运算符的基本用法)(掌握) A:逻辑运算符有哪些&,|,^,!&&,|| 注意事...
    苦笑男神阅读 307评论 0 1
  • 一个朝代的灭亡到底取决与君臣,还是取决于广大社会群众呢? 今天为什么来说这个话题?话题还是来源于自己的工作中,别人...
    锦潇阅读 320评论 0 1