— 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语句使用场景:
针对几个常量值的判断