— Java语言基础(逻辑运算符)

1.逻辑运算符的种类

& (并且)与&&(短路与)

两者的意思是一样的都是代表并且的意思,即有false则false,二者之一有一个错误则结果为错误(false)

public static void main(String[] args) {
    int a = 2;
    int b = 3;

    boolean flag = (a != 2 & (b++) > 3);  //在逻辑运算符中一般用于连接boolean表达式
                                        //flag通过判断a!=2&(b++)>3真假来赋值为真flag=true为假时false

    System.out.println(flag);
    System.out.println("b=" + b);

    boolean flag1 =( a != 2 && (b++) > 3);/*此时用的并且符号已经是短路并且在上一个与之雷同的表达式中
                                        输出的b完成了加1而此时并无加1.所以&与&&都是并且的区别一
                                        目了*/
    System.out.println(flag1);
    System.out.println("b=" + b);
}
//输出的结果是
false
b=4
false
b=4           //b并未加1

通过以上代码可以看出&与&&区别是短路与(&&)为了达到更快的效率,如果判断出作比较的表达式的左端为false那么右端不会进行计算直接输出结果为false而&则会进行运算。

| (或者)与||(短路或)

或逻辑是表示表达式中有true 则输出为true,即有true则true。二者中有一个为true则为true。

public static void main(String[] args) {
    int a = 2;
    int b = 3;
    boolean flag = (a == 2 | (b++) > 4);//只有一个|为或者
    System.out.println(flag);
    System.out.println("b=" + b);

    boolean flag1 = (a == 2 || (b++) > 4);//为短路或
    System.out.println(flag1);
    System.out.println("b=" + b);
}
//输出结果为
true
b=4
true
b=4

或者运算符与并且运算符雷同,同样是运算效率的问题。|是不管什么情况都会运算两端的,而短路或(||)如果运算出左端结果为true就会直接输出结果为true。

! (非)与^ (异或)

!逻辑是遇见true变false , 遇见true变false
^逻辑异或是两个相同时为false ,不同时为true
但两者有个共同的特点是偶数个不改变本身

public static void main(String[] args) {

    boolean flag=true!=true;   
    System.out.println(flag);
    boolean flag1=!(true!=true);
    System.out.println(flag1);
}//输出结果是
false
true
public static void main(String[] args) {
        boolean flag=true^true;
        System.out.println(flag);
        boolean flag1=true^true^true;
        System.out.println(flag1);

}
//输出结果是
false
true

由上图可以证明以上结论。
当然开发中常用的是&&,||,!

2.位运算符的种类(了解)

&(与),|(或),^(异或),~(按位取反),<<(左移),>>(右移),>>>(无符号右移)

注意事项:
— 位运算是直接对二进制补码进行运算的。

public static void main(String[] args) {
    int  a=3;
    System.out.println(~3);
    System.out.println(a>>1);
    System.out.println(a<<1);
    System.out.println(-a>>>2);
}
//运算结果是
-4
1
6
1073741823

— 结果能看出来位运算符是直接对与二进制8421码进行补码运算的

<< : 左移   空位补0,被移除的高位丢弃。
  >> : 右移   被移位的二进制最高位是0,右移后,空缺位补0;最高位是1,高位补1。
  >>>: 无符号右移 被移位二进制最高位无论是0或者是1,空缺位都用0补。
  << : 把<<左边的数据乘以2的移动次幂   例如 10<<3    结果 10*2^3=80
  >> : 把>>左边的数据除以2的移动次幂   例如 40>>3     结果 40/2^3=5

3.三元运算符

  • 三元运算符的格式是
(关系表达式)?表达式1:表达式2
  例如 int a=(10>20)?30:50;
  输出  a=50;
  • 三元运算符的执行流程
    计算关系表达式的值,如果为true,运算后的结果是表达是1。如果为false结果为2。
  • 例:获取两个数中的最大值(我们这次用异或的方法来写,还可以用加入第三方来写)
public static void main(String[] args) {
    Scanner sc = new Scanner(System.in);
    System.out.println("请输入第一个整数:");
    int num = sc.nextInt();
    System.out.println("请输入第二个整数:");

    int num1 = sc.nextInt();
    num=num1^num;
    num1=num^num1;
    num=num1^num;
    System.out.println("通过异或符号进行值的互换:"+num+" "+num1);
}
//运算结果是
请输入第一个整数:
1
请输入第二个整数:
2
通过异或符号进行值的互换:2 1

—— Java语言基础(顺序结构语句)

1.概念:
顺序结构语句是程序中最简单最基本的流程控制,没有特定的语法结构,按照代码的先后顺序,依次执行,程序中大多数的代码都是这样执行的。
总的来说:写在前面的先执行,写在后面的后执行
2.执行流程
从上往下,依次执行。
3.例如:
输入一个顺序的代码,输出几句话

public static void main(String[] args) {
    System.out.println("我爱你祖国");
    System.out.println("少年强则中国强");
}
输出结果是:
我爱你祖国		//按照顺序输出
少年强则中国强

—— Java语言基础(选择结构语句)

1.选择结构语句概述

  • 概述:也被称为分支结构。
    选择结构有特定的语法规则,代码要执行具体的逻辑运算进行判断,
    逻辑运算的结果有两个,所以产生选择,按照不同的选择执行不同的代码。

2.选择语句的表达形式if的基本使用。

if语句有三种格式并且if语句是最常用的选择表达语句

  • 格式1:
if(比较表达式或者是boolean类型的值) {
  			语句体;
  		 }

最简单的if语句执行流程是先计算表达式的值,看其返回值是true还是false。如果是true,就执行语句体。如果是false,就不执行。
(因为较简单就不敲代码演示了)

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

这一种就比格式1多了一步,即先计算比较表达式,其返回值是true就执行语句体1,如果返回值为false就执行语句体2。
(格式3再进行演示)

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

格式三就开始比较多项选择了与前面一样,是先判断表达式的返回值是true是true就执行该语句体是false就不执行。
其中按顺序执行下来如果有一个if满足条件执行完语句体后直接跳出,if语句结束。else可以省略但是不建议省略。

做一个例题:

//需求:键盘录入一个成绩,判断并输出成绩的等级。
 /*
  90-100 A等
  0-89  B等
  70-79  C等
  60-69  D等
   0-59   E等
 */
public static void main(String[] args) {
    Scanner sc = new Scanner(System.in);
    System.out.println("请输入你的成绩1--------100:");
    int score = sc.nextInt();
    if (score >= 90 && score <= 100) {
        System.out.println("A等");
    } else if (score >= 80 && score <= 89) {
        System.out.println("B等");
    } else if (score >= 70 && score <= 79) {
        System.out.println("C等");
    } else if (score >= 60 && score <= 69) {
        System.out.println("D等");
    } else if (score < 59 && score >= 0) {
        System.out.println("E等");
    } else {
        System.out.println("输入错误,请输入正确成绩:");
   }

}
  • 选择结构if的注意事项
    a:比较表达式无论简单还是复杂,结果必须是boolean类型
    b:if语句控制的语句体如果是一条语句,大括号可以省 略;如果是多条语句,就不能省略。建议永远不要省略。
    c:一般来说:有左大括号就没有分号,有分号就没有左大括号。
  • if语句运算格式2和三语的想互转换
    三元运算符实现的,都可以用if语句来实现。反之不成。
    那么什么时候不能用三元改进呢?
    因为三元运算符是一个运算符,运算符操作完毕是有一个结果的而不是一个输出。比如判断一个语句结果为true时要输出一段话,if语句就可以完成而三元法就不行。

2.选择结构switch语句的基本使用。

public static void main(String[] args) {
    Scanner sc = new Scanner(System.in);
    System.out.println("请输入今天是周几");
    int day = sc.nextInt();
    switch (day){
        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("体育课");      //  当然第7个可以写成default因为一周只有7天可是有人故意
             break;                           //故意搞怪或者不小心输入错误那么就可以再加一个如下面写的
        default:
            System.out.println("输入日期有误!");

    }
}

这个代码是一个每周几上什么课的代码,执行起来是先判断你要输入的switch括号内与执行框内case后面的值是否相等,相等执行case后面的程序,不等与下一个对比。break是如果执行了这个case语句就直接跳出,如果没有break就会出现击穿,导致下面不判断case值直接继续执行以下每个case值的程序.

  • 注意事项
    a:case后面只能是常量,不能是变量,而且,多个case后面的值不能出现相同的
    b:default以省略,但是不建议,因为它的作用是对不正确的情况给出提示。
    c:break可以省略吗?
    可以省略,但是结果可能不是我们想要的。
    会出现一个现象:case穿透。
    最终我们建议不要省略
    d:default可以在任意位置。但是建议在最后。
    e:switch语句的结束条件:
    1):遇到break就结束了
    2):执行到末尾就结束了
  • default与break的简单例题,看程序写结果:
public static void main(String[] args) {
    int x = 2;
    int y = 3;
    switch (x) {
        default:
            y++;
        case 3:
            y++;
        case 4:
            y++;
    }
    System.out.println("y=" + y);
}

这个运行结果是 y=6为什么是这个结果呢?
–因为x=2并无与之匹配的case所以执行default , y加了1然后因为无break继续执行case 3里面的执行语句,则y再加1,同理无break再执行下一个语句则y最终加了3次1。y=3+3=6;如果在case 3后加入一个break 结果就不一样了,运行结果是5。因为遇见第一个break程序跳出。

3.if与switch语句的区别。

  • if语句使用场景:
    针对结果是boolean类型的判断
    针对一个范围的判断
    针对几个常量值的判断
  • switch语句使用场景
    针对几个常量值的判断