day_02知识点总结(运算符、流程控制语句)

1.运算符

运算符:对常量或者变量进行操作的符号

表达式:用运算符把常量或者变量链接起来的符合Java语法的字符串称为表达式

 public static void main(String[] args) {
        int a = 10;
        int b = 20;
        //int c = a + b ;
        int c;
        c  = a + b;//表达式   类型  将a+b的结果赋值给c
    }

1.1算术运算符(理解)

    +    -    *    /    %
 //算术运算
        int  aa =   15;
        int bb = 2;
        int dd = aa / bb;//商
        int ee = aa % bb;//余数   取余运算
        System.out.println(dd);
        System.out.println(ee);

1.3算术运算的规则

int   i1 = 20;
        int i2 = 30;
        int sum1 = i1 + i2; // int
        byte  b1 = 3;
        short s1 = 5;
        int sum2 = b1 +s1 ;// int
        long  l1 = 23L;
        long sum3 =  i1 + l1;// long

整数运算:

如果两个操作数有一个是long,则表达式的类型一定是long;

如果在一个表达式中,所有的操作数都是整数,且不为long则结果为int

浮点运算:

 //4. 浮点运算规则
        float  f1 = 3.14F;
        float f2 = 2.56F;
        float sumf  = f1 + f2;// 如果两个操作数都是float类型 则结果可以使用float保存也可以使用double(这是类型自动转换)
        System.out.println(sumf);
        double d1 = 4.5;
        double sumd = f1 + d1 ;//浮点数在进行运算的时候  如果有一个操作数为double  则结果肯定为double

取模(求余)运算:

//5. 取模求余运算
        int ss1 =  7 % 3;// 1
        int ss2 = -7 % 3; //-1
        int ss3 = 7 % -3 ; // 1
  • 求余运算可以使用浮点数,一般使用的都是整数。取模运算的结果为两个数的余数,余数的符号和左边操作数(被除数)的符号相同

1.4字符的”+“操作

char类型参与算术运算。使用的是字符的ascll码

'a'------------------97 a ---z 是连续的

'A'-----------------65 A ---Z 是连续的

'0'-----------------48 0---9 是连续的

算术表达式中包含多个基本类型的操作数的时候,整个算术表达式的类型会自动提升:

提升规则:

byte类型 short char类型都将被提升为int类型

整个表达式的类型自动提升到表达式中最高等级的操作数的同样的类型。

等级顺序: byte,short char-->int --- > long --->float---->double

1.5字符串

 //7.字符串的操作
        String  str1 = "hello";
        int aa = 22;
        String str2 = str1 + aa;// hello22
  • 当字符串和数值型的数据进行运算时(+) 此时进行的是字符串拼接 而不是算术运算 ,因此在字符串运算中,“+”称为字符串连接符 当字符串链接的时候 是从左至右 依次拼接

 String  str3 = 1 + 999 + "年中国";// 1000年中国
System.out.println(2000+ 20 +"中国"+6+666);//2020中国6666

2赋值运算符

赋值运算符: =

扩展的赋值运算符: += -= *= /= %= 先进行算术运算 后赋值

 // 1 赋值运算符
        int  a1 = 10;
        a1 += 10; // a1 = a1 + 10
        System.out.println(a1);
        short s1 = 20;
        s1 = (short)(s1 + 10);
        s1 += 10;// 类似于 s1 = s1 + 10  此时的扩展赋值运算符  隐含着类型的强制转换

在扩展赋值运算符中 隐含了强制类型转换

3.自增自减运算符

++自增 --自减

 //2 自增自减
        int  a2 = 11;
        a2--;//先取值 后运算
        System.out.println(a2);// 10
        --a2;// 先运算  后取值
        System.out.println(a2);//9 

++和-- 既可以在变量的左边也可以在变量的右边

单独使用的时候,++ 和-- 无论放在变量的左边或者右边 结果都是一样的

//2 自增自减
        int  a2 = 11;
        int a3;
        a3= a2--;// 先取值(a3 = a2)  后运算(a2=a2-1)   
        System.out.println(a3);//a3 =11  a2 =10
        a3= --a2;// 先运算(a2= a2-1)a2=9  后取值 a3= a2  
        System.out.println(a3);//9

练习:

 //3  自增自减的练习
        int x = 10;
        int y = x++ + x++ + x++;
        System.out.println(y);// 10 +11 + 12 = 33
        System.out.println(x);// 13 

4 关系运算符

== != > < >= <=

注意: 关系运算符的结果都是boolean类型 结果要么是true 要么是false

同时注意 == 不要写成 =

//4 关系运算
        int  m = 10;
         int  n = 20;
        System.out.println(m==n);
        System.out.println(m!=n);
        System.out.println(m>n);
        System.out.println(m<n);
        System.out.println(m>=n);
        System.out.println(m<=n);
        //如果在开发中,  比较的结果在后续程序中需要使用,此时我们则需要使用一个变量将比较的结果保存起来
        boolean  flag = m > n;
        System.out.println(flag);

5 逻辑运算符

在数学中 如果表示一个数是大于3 小于6 3<x <6

但是在java中 不能这样写。我们需要拆分成两部分:

拆解为: x> 3 和x <6

合并为: x>3 && x<6

逻辑运算符:

&(与) a & b a和b都是true的时候 结果才为true 否则都为false(只要有一个为false结果就false)

| (或) a | b a 和b都是false 结果false 否则都为true(只要有一个为true结果就true)

!(非) !a 取反 true变false false变true

^(异或) a ^ b a 和b结果不同为true 相同为false

 //5 逻辑运算
        int i = 10;
        int j = 20;
        int k = 30;
        System.out.println((i > j) & (i >k));//false
        System.out.println((i < j)&(i > k));//false
        System.out.println((i>j) | (i < k)); // true

5.1 短路逻辑运算符

&& 短路与 作用和& 相同 但是有短路效果

|| 短路或 作用和|相同 但是有短路效果

&逻辑与 无论左边真或假 右边都会执行

&& 短路与 若果左边为真 右边肯定会执行 。如果左边为false 右边就不执行

| 无论左边为真或假 右边都是要执行

|| 如果左边为true 右边不执行 如果左边为false 此时右边才需要执行

        //6 短路逻辑
        int p = 3;
        int c = 4;
//        System.out.println(p++ >4 & c++ >5);
//        System.out.println(p+"----"+c);// 4 ---5
        System.out.println(p++ >4 && c++ >5);//左边为false  右边则不参与运算
        System.out.println(p+"----"+c);//4---4

6 位运算

位运算指的是进行二进制位的运算

~ 取反

& 按位与

| 按位或

^ 按位异或

<< 左移 将整个2进制数据左移一位 相当与将原来的数乘2

n >>右移 将整个的2进制右移一位 相当与将原来的数除2

&和| 如果两边的操作数类型是boolean类型 则是逻辑运算 如果两边的操作数是整数 则为位运算

 //7 位运算
        int a4 = 5;
        int a5 = 3;
        int a6=2;
        System.out.println(~a4);
        System.out.println(a4 & a5);
        // 使用最高效的方法   计算2的三次方
        System.out.println(a6 * a6  * a6);
        System.out.println(a6 << 2);
   
 //8 面试题
        int a7 = 5;
        int a8 = 6;
        // 需求  在不增加变量的情况下  交换两个整数
//        int a9 = a7;
//        a7 = a8;
//        a8 = a9;
//        System.out.println(a7 +"-------"+ a8);
        //经过三次异或  就可以交换两个数的位置
        a7 = a7 ^ a8;
        a8 = a7 ^ a8;
        a7 = a7 ^ a8;
        System.out.println(a7 +"-------"+ a8);

7 三元运算符

格式: 关系表达式 ? 表达式1: 表达式2

a > b? a : b

计算规则:

1 计算关系表达式的值

2 如果关系表达式的值为true 则结果为表达式1的值

3 如果关系表达式的值为fasle 则结果为表达式2的值

      // 9 三元运算符
        int a9 = 10;
        int a10 = 20;
        System.out.println(a9 > a10 ? a10 : a9);

需求:动物园里有两只老虎,已知两只老虎的体重分别为180kg、200kg,请用程序实现判断两只老虎的体重是否相同。

int aTiger = 180;
int bTiger = 200;
System.out.println(aTiger=bTiger?true:false);

需求:一座寺庙里住着三个和尚,已知他们的身高分别为150cm、210cm、165cm,请用程序实现获取这三个和尚的最高身高

int a = 150;
int b = 210;
int c = 165;
int d = a>b?a:b;
System.out.println(d>c?d:c);

8 流程控制语句

分类:

顺序结构

分支结构(选择结构)(if switch)

循环结构(for while do...while)

8.1 顺序结构

程序的执行是从main方法开始 自上而下 依次执行

    public static void main(String[] args) {
        int n1 = 12;
        int n2 = n1 +23;
        //错误
        int n2 = n1 +23;//解析不到n1
        int n1 = 12;
    }

8.2 分支结构/选择结构

8.2.1 if

单分支:

 public static void main(String[] args) {
      // 1  if 单分支
        int  a  = 10;
        int b = 20;
        // 需求  判断a和b是否相同
        if (a == b){
            System.out.println("a等于b");
        }
        if(a != b){
            System.out.println("a不等于b");
        }
    }

双分支: if --- else

 /*2 双分支  if  else
        * 需求  给出任意的整数,使用程序来判断该整数是奇数还是偶数  并在控制台输出判断结果
         */
        //获取键盘输入数据
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入您要判断的整数:");
        int in = sc.nextInt();// 保存用户输入的整数到变量in中
        // 判断整数是奇数还是偶数
        if(in % 2 == 0 ){
            System.out.println("您输入的整数为偶数");
        }else{
            System.out.println("您输入的整数为奇数");
        }

多分支:

  /*
            3 多分支
            需求:在该高考时,父母许诺,如果考上211   奖励一个mac笔记本     如果考上一本  奖励  iphone   如果考上二本   奖励小米手机
            如果没考上  奖励回去复读
         */
        System.out.println("等待成绩公布,请录入您的高考成绩:");
        int  score  = sc.nextInt();
        if(score > 600){
            System.out.println("奖励mac笔记本");
        }else if (score > 550){
            System.out.println("奖励  iphone");
        }else if(score > 500){
            System.out.println("奖励小米手机");
        }else{
            System.out.println("奖励回去复读");
        }
​

嵌套分支:

 System.out.println("等待成绩公布,请录入您的高考成绩:");
        int  score  = sc.nextInt();
        if(score >=0 && score <= 750){
            if(score >= 600){
                System.out.println("奖励mac笔记本");
            }else if (score >= 550 && score < 600){
                System.out.println("奖励  iphone");
            }else if(score >= 500 && score < 550){
                System.out.println("奖励小米手机");
            }else{
                System.out.println("奖励回去复读");
            }
        }else{
            System.out.println("您输入的成绩有误,请查证后重新输入");
        }

8.2.2 switch

switch(表达式){
    case 值1:
        语句1;
        break;
    case 值2:
        语句2;
        break;
    case 值3:
        语句3;
        break;
    default:
        语句n+1;
        break;
}
String Scanner sc = new Scanner(System.in);
        /*
            switch:
            需求:一年有12个月,分别属于4个季节, 从键盘输入一个月份,来判断该月份是属于哪一个季节
            春: 3   4  5
            夏   6  7   8
            秋   9   10   11
            冬   12  1  2
         */
        System.out.println("请输入您要判断的月份:");
        int  month  = sc.nextInt();
        switch (month){
            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;
            case 8:
                System.out.println("当前月份属于春季");
                break;
            case 9:
                System.out.println("当前月份属于秋季");
                break;
            case 10:
                System.out.println("当前月份属于秋季");
                break;
            case 11:
                System.out.println("当前月份属于秋季");
                break;
            case 12:
                System.out.println("当前月份属于冬季");
                break;
            default:
                System.out.println("您输入的数据有误,请重新输入!!!");
                break;
        }
  1. switch的表达式的类型: char, byte, short, int, enum(枚举) , String(jdk7+)

  2. break的作用:结束当前执行 如果没有break 将发生case穿透

  3. default的位置:default可以出现在任意位置

  4. 对于case如果对应相同的代码 则可以省略前边的case下的语句

switch (month){
            case 1:
            case 2:
            case 12:
                System.out.println("当前月份属于冬季");
                break;
            case 3:
            case 4:
            case 5:
                System.out.println("当前月份属于春季");
                break;
            case 6:
            case 7:
            case 8:
                System.out.println("当前月份属于夏季");
                break;
            case 9:
            case 10:
            case 11:
                System.out.println("当前月份属于秋季");
                break;
            default:
                System.out.println("您输入的数据有误,请重新输入!!!");
                break;
      }
  • switch的表达式类型可以使string

     String  str = "audi";
        switch (str){
            case "audi":
                System.out.println("这是奥迪");
                break;
            case "bmw":
                System.out.println("这是宝马");
                break;
        }

if 和switch区别:

  1. if 判断的是一个范围 switch判断的是一些具体的值

  2. switch判断的数据的值 一定是可列举的 有穷的

  3. 能用switch实现的,一定也能够用if实现 但是能使用if 的 ,不一定能使用switch

8.3 循环结构

for

while

do.......while

特点:所执行的代码是重复;需要有明确的开始和停止标志

for循环

for(初始化语句;条件判断语句;条件控制语句){
    循环语句;
}

循环结构的语法:

  1. 初始化语句 可以使一条或者多条语句 这些语句主要完成一些初始化工作;

  2. 条件判断语句 该语句的执行结果一定是一个boolean值。 这个语句决定了循环体是否执行

  3. 循环体语句 这里可以使一条或者多条语句 也可以是其他结构

  4. 条件控制语句:通常是一条语句,用来改变判断条件的值 从而达到控制语句是否继续向下执行的效果。此处使用自增自减操作居多。


for(初始化语句;条件判断语句;条件控制语句){
    循环语句;
}

循环结构的语法:

1 初始化语句 可以使一条或者多条语句 这些语句主要完成一些初始化工作;

2 条件判断语句 该语句的执行结果一定是一个boolean值。 这个语句决定了循环体是否执行

3 循环体语句 这里可以使一条或者多条语句 也可以是其他结构

4 条件控制语句:通常是一条语句,用来改变判断条件的值 从而达到控制语句是否继续向下执行的效果。此处使用自增自减操作居多。

    public static void main(String[] args) {
        // 循环在控制台输出1--10
       for(int i = 1; i <= 10; i++ ){
           System.out.println(i);
      }
    }
  //计算1-100的整数的和
        int sum = 0;
        for(int i = 1; i <= 100 ;i++){
             sum = sum +i;
        }
        System.out.println(sum);
        // 计算1--100 所有偶数的和
        int sum = 0;
        for(int i= 1 ; i <= 100;i++){
            if(i % 2 == 0 ){
                sum = sum + i ;
            }
        }
        System.out.println(sum);
  // 水仙花数   = 个位 +十位 +百位的立方和等于原数
        // 输出1-1000范围内的所有的水仙花数  水仙花数一定是一个三位数  100--999
        for(int i = 100 ;i < 1000;i++){
            //获取三位数的个位   十位  百位
            int ge = i % 10;
            int shi = i /10 % 10;
            int bai = i /100 ;
            //判断该数是否位水仙花数
            if(ge * ge * ge + shi * shi * shi +bai * bai *bai == i){
                //满足以上条件的数 即为水仙花数
                System.out.println(i);
            }
        }

while循环

  • 先判断 后执行

while(条件判断语句){
    循环体语句;
    条件控制语句;
}
public static void main(String[] args) {
        // 需求  珠穆朗玛峰高度 8844.43 米 = 8844430毫米   加入我们有一张足够大的纸,值得厚度是0.1毫米
        // 计算将纸对着多少次 可以折成珠穆朗玛峰的高度
        // 统计折叠的次数
        int  count = 0;
        //  定义纸的厚度
        double  paper = 0.1;
        // 珠穆朗玛峰的高度
        int  zf = 8844430;
        while(paper <= zf){
            // 完成纸的折叠
            paper *= 2;
            // 此时的折叠次数加一
            count++;
        }
        System.out.println("总共折叠的次数为:" +count);
    }

do ... while

  • 先执行 后判断 无论条件是否成立 至少会执行依次

do{
    循环语句;
    条件控制语句
​
}while(条件判断语句)
   

do...while的使用场景:比如用户登录

三种循环的区别:

1 for循环和while循环先判断条件是否成立 然后决定是否执行循环体 (先判断后执行)

2 do --- while 循环先执行一次循环体 然后判断条件是否成立 是否执行循环体。(先执行后判断)

3 for循环的变量的作用范围仅限于for循环内 而while循环的变量的作用范围大于循环的范围

在java中 变量的作用范围 是距离他最近的一对大括号

int i = 100;
        for( ;i < 1000;){
            //获取三位数的个位   十位  百位
            int ge = i % 10;
            int shi = i /10 % 10;
            int bai = i /100 ;
            //判断该数是否位水仙花数
            if(ge * ge * ge + shi * shi * shi +bai * bai *bai == i){
                //满足以上条件的数 即为水仙花数
                System.out.println(i);
            }
            i++;
        }

死循环:循环一直执行,无法自动结束,只能人为干预停止虚拟机

 for(;;){// 两个分号在任何时候都不能少
             System.out.println("aaaa");
         }
while(true){
​
}
do{
​
}while(true);

8.4 跳转控制语句

  • 在任何循环语句的主体部分,可以采用break来控制循环的流程。break用于强制退出循环,不执行循环中的剩余部分。

   public static void main(String[] args) {
        // 在控制台输出100次helloworld。
        int  count = 0 ;
        while(true){
            System.out.println("hello world");
            count++;
            if(count == 100){
                break;//终止循环的执行。
            }
        }
    }

continue

// 把100--150 之间不能被3 整除的数输出   并且每行输出5个
int count = 0 ; //定义一个计数器
for(int i = 100 ; i <150; i++){
    if(i % 3 == 0 ){// 则说明该数不满足我们的需求
        continue;//结束本次循环 继续下次循环
    }
    // 否则  就是不能被3整除的数
    System.out.print(i+"、");//这个输出语句不换行   println后边会自带换行符
    count++;
    if(count % 5== 0 ){//只要是5的倍数 就换行
        System.out.println();//输出一个换行符
    }
}

带标签的break和continue *

 outter: for(int i = 101; i < 150 ;i ++){
            for(int j = 2; j < i/2 ; j++){
                if(i % j == 0 ){
                    continue outter;
                }
            }
            System.out.println(i);
        }

嵌套循环

//模拟时钟的时针和分针  时针  1--24   分针1-60  当分钟走一圈  时针走一次
        for(int hour = 0 ; hour < 24; hour++){// 模拟时针循环
            for(int minute = 0 ; minute < 60;minute++){
                System.out.println("当前时间为:" + hour +":" + minute);
            }
            System.out.println("-----------------------------------------");
        }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值