运算符和循环

一.运算符
定义:运算符是一种特殊的符号,用以表示数据的运算、赋值和比较等。
分类:算数运算符、赋值运算符、比较运算符(关系运算符)、逻辑运算符、位运算符、三元运算符。
1.算数运算符的测试用例:
/*运算符:

        • % (前)++ (后)++ (前)-- (后)-- +(拼接运算)
  • */
    public class Ari_Test {
    public static void main(String[] args) {
    // / 除号运算(数学运算中取商)
    int num = 14;
    int num1 = 4;
    int result = num / num1;
    //做除法运算时,两整型做除法运算,结果取整,舍弃小数点,不进行进位操作

     double result1 = num / num1;	//输出2.0,当想得到除法精确得数值得时候,我们可能会想到用一个double数据类型得结果来接收结果,但是实际上只是将结果转换成了double型,实际运算结果值不变
     
     double result2 = num / num1 + 0.0;	//输出2.0
     
     double result3 = num / (num1 + 0.0);	//输出精确结果2.4,括号运算符里面得算术运算首先进行,num1 + 0.0,运用自动类型提升规则,int + double = double,int / double = 精准double数值
     
     double result4 = (double) num / num1;	//输出精确结果2.4,和上面原理相同,精确把握自动类型提升运算本质
     System.out.println(result);
     
     //	%	取模运算(数学运算种取余运算)
     //取模结果与被除数符号一致
     //开发中,常使用%来进行判断,判断某数能否被除尽(余数位0)
     int m1 = 12;
     int n1 = 5;
     System.out.println("m1 % n1 =" +m1 % n1);	//2
     
     int m2 = -12;
     int n2 = 5;
     System.out.println("m2 % n2 =" +m2 % n2);	//-2
     
     int m3 = 12;
     int n3 = -5;
     System.out.println("m3 % n3 =" +m3 % n3);	//2
     
     int m4 = -12;
     int n4 = -5;
     System.out.println("m4 % n4 =" +m4 % n4);	//-2
     
     
     //(前)++	先自增1,后调用进行运算		(两者都表示自增1)
     //(后)++	先调用直接参与运算,后自增1	
     int a1 = 10;
     int b1 = ++a1;	//a1先++之后为11,再赋值给变量b1
     System.out.println(a1);	//11
     System.out.println(b1);	//11
     int a2 = 10;
     int b2 = a2++;	//先调用a2,先直接赋值给b2之后,才进行了a2得自增操作
     System.out.println(a2);	//11,此时已自增完成后,a2得值变成了11
     System.out.println(b2);	//10
     
     //注意点:
     short s = 10;
     //s = s + 1;	编译失败,char、byte、short任意之间两两运算或者与整型常量进行运算,结果都是int型得,不能用short型来接收结果
     //s = (short)(s + 1)	正确得,int->short,大容量数据转向小容量数据,运算强制类型转换符,进行强制类型转换
     s++;	
     //自增1,不会改变原数据本身得数据类型,这种用法效率更高,不需要进行强转截断操作
     
     //(前)--	先自减1,后调用进行运算		(两者都表示自减1)
     //(后)--	先调用直接参与运算,后自减1	 
     int o1 = 10;
     int p1 = --o1;
     System.out.println("o1 = "+ o1 +" p1 = "+ p1);	//9,9
     
     int o2 = 10;
     int p2 = o2--;
     System.out.println("o2 = "+ o2 +" p2 = "+ p2);	//9,10
    

    }
    }
    2.赋值运算符
    赋值运算符号"=" = += -= /= %=
    赋值运算符测试用例
    public class SetValue_Test {
    public static void main(String[] args) {
    int j1,j2; //连续定义变量
    j1 = j2 = 10; //连续从右向左赋值
    int j3 = 20,j4 = 20; //连续单一赋值

     //******************>
     int num = 6;
     num += 2;	//等效于num = num + 2;
     System.out.println(num);	//8
     
     int num1 = 5;
     num1 %= 2;	//等效于num1 = num1 % 2;
     System.out.println(num1);	//1
     
     
     //注意:上述运算符除了单个赋值运算符之外,剩下得双层赋值运算符,运算前后都不会改变变量本身得数据类型
     short num2 = 8;
     //num2 = num + 2;	编译不通过,short + int = int,需要进行类型提升,使用int型数据类型变量来接收结果
     num2 += 2;	//等效于num2 = num2 + 2;
     System.out.println(num2);	//10
     
     //开发中,如果要希望变量实现+2得操作,有几种方法?(前提 : int num = 10;)
     //方式1:num = num + 2;
     //方式2:num += 2;(推荐)此种赋值方式不仅赋值前后不会改变数据类型,并且在数据类型为byte、short、char数据类型得时候,不会造成强转,造成精度损失得情况,并且代码量也比较少
     3.比较运算符
      == != > < >= <= instanceof(判断某个对象是否是一个类得实例)
       * 结论:
    
  • 1.比较运算符得运算结果都是布尔boolean类型得数值,true或者false

  • 2.区分"==“和”="

  • */
    public class Comparable_Test {
    public static void main(String[] args) {
    int i = 10;
    int j = 20;
    System.out.println(i == j); //false,"==“为比较运算符,基本数据类型比较得是两个数值得值是否相等,引用数据类型比较得是两对象变量得首地址,判断结果为true或者false
    System.out.println(i = j); //20,单个”="号代表得是赋值运算符,从右向左进行运算,代表得是将赋值运算符右边得值赋给左边得变量,会对该变量原先存储得值进行覆盖
    }
    }
    4.逻辑运算符。
    & && | || ! ^
    说明:

  • 1.逻辑运算符操作的都是布尔boolean类型的变量

  • */
    public class LogicTest {
    public static void main(String[] args) {
    //区分 & 和 &&
    //相同点1:& 和 &&运算结果相同
    //相同点2:当符号左边都是true的时候,二者都会执行符号右边的运算
    //不同点:当符号左边是false时,&继续执行符号右边的操作
    // 当符号左边是false时,&&不再执行符号右边的操作
    //开发中,推荐使用&&
    boolean b = false;
    int num = 10;
    if(b & (num++ > 0)) {
    System.out.println(“A”);
    }else {
    System.out.println(“B”); //B
    }
    System.out.println(num); //11

     boolean b1 = false;
     int num1 = 10;
     if(b1 && (num1++ > 0)) {
     	System.out.println("A");
     }else {
     	System.out.println("B");	//B
     }
     System.out.println(num1);	//10
     
     //区分: | 和 || 与 & 和 &&运算规则相同
     //相同点1:| 和 ||的运算结果都是相同的
     //相同点2:当符号左边都是false,两者右边的运算都会执行
     //不同点:当符号左边是true的话,|右边还是会继续执行的
     //		 当符号左边是true的话,||右边就不会继续执行了
     //开发中,推荐使用||
     boolean b2 = true;
     int num2 = 10;
     if(b | (num2++ > 0)) {
     	System.out.println("A");	//A
     }else {
     	System.out.println("B");
     }
     System.out.println(num2);	//11
     
     int num3 = 10;
     if(b || (num++ > 0)) {
     	System.out.println("A");	//A
     }else {
     	System.out.println("B");
     }
     System.out.println(num3);	//10
    

    }
    }

5.位运算符

  • 结论**

    (1)位运算符操作的都是整型的数据

    (2)位运算符进行的操作都是在二进制数的基础上进行的(移动位数不能过大,否则超过了数据类型的范围的话,数值会变成负数)

经典面试题:最高效的方式计算2 * 8?2 << 3 或 8 < 1

例:十进制的21转换成二进制数位(0001 0101)

21 << 2:0101 0100 结果为84。在一定范围内,左移几位就相当于在原数的基础上 * 2^移动位数倍。

21 >> 1:0000 1010 结果为10。在一定范围内,右移几位就相当于在原数的基础上 / 2^移动位数倍。
6.三元运算符
1.结构:(条件表达式)?表达式1:表达式2;

  • 2.说明:

  • (1)条件表达式的结果为布尔boolean类型数值

  • (2)根据条件表达式的真或假,来判断执行的表达式为表达式1还是表达式2

  •  条件表达式结果为真(true)时,表达式1的值就是需要的值,执行表达式1
    
  •  条件表达式结果为假(false)时,表达式2的值就是需要的值,执行表达式2
    
  • (3)表达式1和表达式2是一致的。

  • (4)三元运算符是可以嵌套的

  • 3.凡是可以使用三元运算符的地方,都可以改写成if-else语句

  • 反之,不成立。

  • 4.如果条件判断语句既可以使用三元运算符,if-else语句来写的话,优先推荐使用三元运算符

  • 因为三元运算符执行效率更高,更简洁。

  • */
    public class SanYuan_Test {
    public static void main(String[] args) {
    //获取两个正整数的较大值
    int m = 12;
    int n = 5;
    int max = m > n?m : n;
    System.out.println(max); //12

     //int max = m > n?2 : 1.0;	编译出错,三元运算符在进行赋值运算之前,表达式1和表达式2的值会进行数据类型比较,较小容量数据会自动向较大容量数据进行自动类型提升
     double max1 = m > n?2 : 1.0;	//所以,运算结果,也需要用较大容量的数据类型变量来接收
     
     //*************************************
     String maxStr = m > n?"m大":(m == n)?"m和n一样大":"n大";
     System.out.println(maxStr);	//m大
     
     //*************************************
     //获取三个数的最大值
     int n1 = 15;
     int n2 = 66;
     int n3 = -36;
     int max2 = n1 > n2?n1 : n2;
     int max3 = max2 > n3?max2 : n3;
     System.out.println(max3);	//66
     
     //不建议这样使用,可读性差,效率低。
     int max4 = n1 > n2?(n1 > n3?n1 : n3):n2;
     System.out.println(max4);	//66
    

    }
    }

二.循环
1.程序流程控制
1.1 if-else语句
分支结构中的if - else(条件判断结构)使用方法:

第一种:单选(当且仅当条件表达式为真时,才进入内部执行执行语句,否则不执行)

if(条件表达式 ){

​ 执行语句;

}

第二种:二选一(肯定会执行一个,当条件表达式为真时,执行执行语句1,否则执行执行语句2)

if(条件表达式){

​ 执行语句1;

}else{

​ 执行语句2;

}

第三种:多选一(肯定会执行一个,具体执行请参照二选一)

if(条件表达式1){

​ 执行语句1;

}else if(条件表达式2){

​ 执行语句2;

}else if(条件表达式3){

​ 执行语句3;

}…(条件表达式n - 1){

​ 执行语句n - 1;

}else{

​ 执行语句n;

}
1.2 swich-case结构
switch(表达式){ //这里的表达式并非是一个条件表达式,而是一个常量

case 常量1:

执行语句1;

break; //非必要,根据情况决定是否去添加

case 常量2:

执行语句2;

break;

default:

执行语句n;

break; //可加可不加,本身已经到达表达式最后了,必然会跳出判断语句

}

  • 说明:

    (1)根据switch表达式中的值,依次匹配各个case中的常量。一旦匹配成功,则进入相应case执行结构中的执行语句去执行,当调用完执行语句以后,则仍然继续向下执行其他case中的执行语句,直到遇到break关键字或者执行完最后一个default的执行语句末尾才会结束执行


    (2)default默认执行语句只有在前面的所有case语句都未匹配的情况下才会执行,并且执行语句之后的break可加可不加,因为此执行语句本身就在末尾,执行完此执行语句之后,会默认跳出switch - case条件判断语句


    (3)break关键字,可以使用到switch - case结构中,表示一旦遇到此关键字,就跳出条件判断语句

    (4)switch结构中的表达式,只能是如下的6种数据类型之一:byte、short、char、int、枚举类型(JDK5.0新增)、String类型(JDK7.0新增)


    (5)case之后只能声明常量,不能声明一个范围(条件判断语句)


    (6)break关键字是可选的


    (7)default可以理解成相当于if - else条件判断语句中的else(兜底执行操作)。

    default结构式可选的。并且default的位置可以是任意的,并且不影响执行结果。
    二.循环结构

    • 定义:在某些条件满足的情况下,反复执行特定代码的功能
  • 分类:

    for循环

    while循环

    do - while循环

  • 循环语句的四个组成部分(要素):

    (1)初始化部分

    (2)循环条件部分 —>是boolean类型

    (3)循环体部分

    (4)迭代部分

  • 执行顺序:

    (1)初始化部分(只执行一次,进入循环条件,对变量的初始值进行定义)

    (2)循环条件部分(可多次进行判断,直到条件不再满足的情况下就跳出循环,接着执行接下来的顺序执行语句)

    (3)循环体部分(进行循环体内部多次反复执行的语句)

    (4)迭代部分(对初始化的部分进行迭代,可以理解为为初始化条件多次进行改变,改变之后判断循环条件是否满足,满足则继续执行,不满足就跳出循环,接着循序执行之后的代码)

2.1 for循环结构

格式:

for((1)初始化条件;(2)循环条件;(3)迭代条件){
​ (4)循环体;

}

  • 执行顺序:[ (1)-(2)-(4)-(3) ]、[ (2-(4)-(3) ]、[ (2)-(4)-(3) ] (2、4、3不断重复执行)、(2),直到最后累加的迭代条件不在满足循环条件的时候则跳出循环
    2.2 while循环结构

  • 循环语句的四个组成部分(要素):

    (1)初始化部分

    (2)循环条件部分 —>是boolean类型

    (3)循环体部分

    (4)迭代部分

  • while循环得结构:

    (1)

    while( (2) ){
    ​ (3);

    (4);

    }

  • 执行顺序和for循环相同:[ (1)-(2)-(4)-(3) ]、[ (2)-(4)-(3) ]、[ (2)-(4)-(3) ] (2、4、3不断重复执行)、(2),直到最后累加的迭代条件不再满足循环条件的时候则跳出循环

说明:

1.写while循环千万不能忘记写迭代得条件,否则会一个变量值无法进行迭代,反复执行执行条件,没有跳出条件,造成死循环!

2.我们写程序,要避免死循环。

3.for循环和while循环是可以相互转换得!

4.for循环和while循环得初始化条件不同

for循环条件内定义得变量i只能在for循环之内有效调用,while循环初始化条件定义在外部,初始化条件变量也可以进行调用,在一整个函数之内有效调用。
2.3 do - while循环

  • 循环语句的四个组成部分(要素):

    (1)初始化部分

    (2)循环条件部分 —>是boolean类型

    (3)循环体部分

    (4)迭代部分

  • 结构:

    (1)

    do{

    (3)

    (4)

    }while( (2) );

  • 执行过程:(1) - (3) - (4) - (2) - (3) - (4) - … - (2)

  • 说明:

    (1)do - while循环至少会执行一次循环体!(不管三七二十一,进去先执行一次循环体,之后在进行判断条件是否满足循环条件)

    (2)开发中,大多使用for循环和while循环进行循环语句的执行,较少使用do - while语句
    2.4 循环语句中的关键字break和continue。

    • break关键字得适用范围: 循环中使用得作用(不同点) 相同点
    • switch - case语句
    • 循环结构中 结束当前循环 关键字后面不能声明执行语句
  • continue关键字得适用范围:

    • 循环结构中 结束当次循环 关键字后面不能声明执行语句
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值