zoukankan      html  css  js  c++  java
  • 重踏学习Java路上_Day03(java 基础上,运算符,IF等)

    1:运算符(掌握)
    (1)算术运算符
    A:+,-,*,/,%,++,--
    B:+的用法
    a:加法
    b:正号
    c:字符串连接符
    C:/和%的区别
    数据做除法操作的时候,/取得是商,%取得是余数
    D:++和--的用法
    a:他们的作用是自增或者自减
    b:使用
    **(即++或--)单独使用
    放在操作数据的前面和后面效果一样。
    a++或者++a效果一样。
    **(即++或--)参与操作使用
    放在操作数的前面:先自增或者自减,再参与操作
    int a = 10;
    int b = ++a;
    放在操作数的后面:先参与操作,再自增或者自减
    int a = 10;
    int b = a++;


    最重要的面试题:
    int x=4;
    int y=(x++)+(++x)+(x*10);//每一个括号就会当作一次操作(x++)在操作后进行,所以(x++)模块输出为4,执行完(x++)后x=5,(++x)模块输出为6,此时x为6,最后加上6*10,总数为70
    //y=4+6+(6*10)=70
    //x=6
    System.out.println(x);//6
    System.out.println(y);//70


    注意:整数相除只能得到整数,如果想得到小数,必须把数据化为浮点数类型
    System.out.println(a*1.0/b);
    System.out.println(a*1.0+b);

    (2)赋值运算符
    A:=,+=,-=,*=,/=,%=等
    B:=叫做赋值运算符,也是最基本的赋值运算符
    int x = 10; 把10赋值给int类型的变量x。
    C:扩展的赋值运算符的特点
    隐含了自动强制转换。

    拓展的赋值运算符:+=,-=,*=,/=,%=

    +=把左边和右边做加法,然后赋值给左边


    面试题:
    short s = 1;
    s = s + 1;

    short s = 1;
    s += 1;
    请问上面的代码哪个有问题?

    第一个会出现问题,原因是两个short进行运算会默认转换为int后在运算,赋值给short类型会出现截取现象,精度损失,出现爆索

    而第二个没有问题的原因是,拓展的赋值运算符其实隐含了一个强类型的转换,

    short s = 1; s += 1;(其实不是等价于s=s+1,而是等价于s = (s的数据类型))(s+1);所以不会报错。 


    (3)比较运算符
    A:==,!=,>,>=,<,<=
    B:无论运算符两端简单还是复杂最终结果是boolean类型。
    C:千万不要把==写成了=

    D.==:基本类型:比较的就是值是否相同;引用类型:比较的就是地址值是否相同
    (4)逻辑运算符
    A:&,|,^,!,&&,||
    B:逻辑运算符用于连接boolean类型的式子
    C:结论
    &:有false则false
    |:有true则true
    ^:相同则false,不同则true。
    举例:情侣关系 男男false 男女true 女男true 女女false
    !:非true则false,非false则true

    &&:结果和&是一样的,只不过有短路效果。左边是false,右边不执行。
    ||:结果和|是一样的,只不过有短路效果。左边是true,右边不执行。

    因为具有短路功能,所以我们一般开发中选用:&&,||,! 三个逻辑运算符


    (5)位运算符(了解)

    注意:要做位运算,首先要把数据转换为二进制,而且要变为补码再做运算

    左移符号会把数据*2的移动次幂  2<<3  = 16

    右移符号会把数据/2的移动次幂   12>>1 =6     12>>2=3

    无符号右移:-24>>2 = -24/4=6

                    -24>>>2 = 1073741818  (原因是右移后左边补的是0,而此时移动的值为补码,补码符号位为0时,原码,补码,反码都相同,所以不用改变,最后变为1073741818)


    A:^的特殊用法(^为异或位运算)
    一个数据针对另一个数据位异或两次,该数不变
    B:面试题
    a:请实现两个变量的交换
    **采用第三方变量
    **用位异或运算符
    左边a,b,a
    右边a^b

    方法二:

    int a = 3;

    int b = 4;

    a=a^b;

    b=a^b;(此时b=(a^b)^b=a,交换了a出来)

    a=a^b;(此时a=(a^b)^a=b,交换了b出来)

    此时a与b已经交换完毕

    方法三:

    a=a+b;

    b=a-b;

    a=a-b;//这样也能交换

    方法四:

    b=(a+b)-(a=b);//就能交换a与b的值


    b:请用最有效率的方式计算出2乘以8的结果
    2<<3   ----2*2^3=8(所有的乘法都会转移到位移上运算)

    表达式:就是用运算符把常量或者变量连接起来的符合java语法的式子

    (6)三元运算符,三目运算符
    A:格式
    比较表达式?表达式1:表达式2;
    B:执行流程:
    首先计算比较表达式的值,看是true还是false。
    如果是true,表达式1就是结果。
    如果是false,表达式2就是结果。
    C:案例:
    a:比较两个数据是否相等 //a==b
    b:获取两个数据中的最大值//a>b?a:b
    c:获取三个数据中的最大值//

    方法一:int temp =(a>b)?a:b;temp = (temp>c)?temp:c;

    方法二:int max = (a>b)?(a>c?a:c):(b>c?b:c);


    2:键盘录入(掌握)
    (1)实际开发中,数据是变化的,为了提高程序的灵活性,我们加入键盘录入数据。
    (2)如何实现呢?目前就记住
    A:导包
    import java.util.Scanner;

    Java 5添加了java.util.Scanner类,这是一个用于扫描输入文本的新的实用程序。

    位置:在class的上边
    B:创建对象
    Scanner sc = new Scanner(System.in);
    C:获取数据
    int x = sc.nextInt();
    (3)把三元运算符的案例加入键盘录入改进。

    3:流程控制语句
    (1)顺序结构 从上往下,依次执行
    (2)选择结构 按照不同的选择,执行不同的代码

         选择结构有特定的语法规则,代码要执行具体的逻辑运算进行判断,逻辑运算的结果有两个,所以产生了选择,按照不同的选择执行不同的代码。Java语言提供了两种选择结构语句:if语句与switch语句。

    (3)循环结构 做一些重复的代码

    4:if语句(掌握)
    (1)三种格式
    A:格式1
    if(比较表达式,关系表达式) {
    语句体;
    }
    注意事项:关系表达式无论是简单还是复杂,结果必须是boolean类型;if语句控制的语句体如果是一条语句,大括号可以省略;如果是多条语句,就不能省略。建议永远不要省略。

    一般来说:有左大括号就没有分号,有分号就没有左大括号,例子:

    int b = 100;

    if(b!=100); {

         System.out.println("啦啦啦");

    }//因为if后面有一个分号,已经结束了,大括号此处变成了一个语句块,单独执行,做一输出"啦啦啦"

    结果输出:啦啦啦()


    执行流程:
    判断比较表达式的值,看是true还是false
    如果是true,就执行语句体
    如果是false,就不执行语句体

    B:格式2
    if(比较表达式) {
    语句体1;
    }else {
    语句体2;
    }

    执行流程:
    判断比较表达式的值,看是true还是false
    如果是true,就执行语句体1
    如果是false,就执行语句体2

    C:格式3
    if(比较表达式1) {
    语句体1;
    }else if(比较表达式2){
    语句体2;
    }
    ...
    else {
    语句体n+1;
    }

    执行流程:
    判断比较表达式1的值,看是true还是false
    如果是true,就执行语句体1
    如果是false,就继续判断比较表达式2的值,看是true还是false
    如果是true,就执行语句体2
    如果是false,就继续判断比较表达式3的值,看是true还是false
    ...
    如果都不满足,就执行语句体n+1
    (2)注意事项
    A:比较表达式无论简单还是复杂,结果是boolean类型
    B:if语句控制的语句体如果是一条语句,是可以省略大括号的;如果是多条,不能省略。
    建议:永远不要省略。
    C:一般来说,有左大括号,就没有分号,有分号,就没有左大括号。
    D:else后面如果没有if,是不会出现比较表达式的。
    E:三种if语句其实都是一个语句,只要有一个执行,其他的就不再执行。
    (3)案例:
    A:比较两个数是否相等
    B:获取两个数中的最大值
    C:获取三个数中的最大值(if语句的嵌套)
    D:根据成绩输出对应的等级
    E:根据月份,输出对应的季节
    F:根据x计算对应y的值并输出
    (4)三元运算符和if语句第二种格式的关系
    所有的三元运算符能够实现的,if语句的第二种格式都能实现。
    反之不成立。if..else..比较数值大小和三元比较大小。

    如果if语句第二种格式控制的语句体是输出语句,就不可以。
    因为三元运算符是一个运算符,必须要有一个结果返回,不能是一个输出语句。

    12:看程序写结果:请自己独立分析,先不要编译运行。
    第一题
    int x = 1,y = 1;

    if(x++==2 & ++y==2) //f&t =f x=2 y=2
    {
    x =7;
    }
    System.out.println("x="+x+",y="+y);

    ---------------------------------------------------
    第二题
    int x = 1,y = 1;

    if(x++==2 && ++y==2)//x=2 y =1 因为第一个为false所以不执行,短路
    {
    x =7;
    }
    System.out.println("x="+x+",y="+y);

    ---------------------------------------------------
    第三题
    int x = 1,y = 1;

    if(x++==1 | ++y==1)// 2 2
    {
    x =7;
    }
    System.out.println("x="+x+",y="+y);//7 2

    ---------------------------------------------------
    第四题
    int x = 1,y = 1;

    if(x++==1 || ++y==1)因为第一个为true所以不执行,短路
    {
    x =7;
    }
    System.out.println("x="+x+",y="+y);//7 1

    ---------------------------------------------------

  • 相关阅读:
    使用阿里云ECS安装HDFS的小问题
    退役回忆录嘤嘤嘤
    2018 ICPC北京 H ac自动机
    Educational Codeforces Round 54 (Rated for Div. 2) DE
    sa learning
    网络流learning
    Python模块logging
    Python模块unittest
    Linux /dev/shm
    Shell 字符串操作
  • 原文地址:https://www.cnblogs.com/canceler/p/4575416.html
Copyright © 2011-2022 走看看