本帖最后由 张研老师 于 2015-11-29 23:32 编辑
赋值运算符:
=,+=,-=,*=,/=,%=
byte a = 4;
a += 5; // 相当于 a =(byte)(a + 5); (左右相加,值给左边)
掌握:
byte b = 10;
b++; 相当于 b+=1 相当于 b = (byte)(b+1);
关系运算符
==,!= ,> ,>= ,<,<=
关系运算符连接起来的式子(关系表达式,条件表达式),结果肯定是boolean。
int a = 10;
int b = 20;
a > b
a+=10;
sop(a); //20
逻辑运算符
&:逻辑与(并且) 有false则整体为false
|:逻辑或(或者) 有true则整体为true
!:逻辑非 以前真,现在假,以前假,现在真。(偶数个,本身值不变)
^:逻辑异或 相同为false,不同为true。
&&:短路与,有短路效应,前边出现false,后边不执行。
||:短路或,有短路效应,前边出现true,后边不执行。
&&和&的区别:
&&:短路与,有短路效应,前边出现false,后边不执行。
&:逻辑与,无论前边是false还是true,后边都会执行。
他们的运行结果是一样的。
||和|的区别:
开发中常用: &&,||,!
位运算符
操作的是二进制数据(0可以看做是false,1可以看做是true)。
&:按位与 有0则0
|:按位或 有1则1
~:按位取反 以前是0,现在是1(包括符号位) 最终的结果相当于该数据 +1,然后求反(正负)。
^:按位异或 相同为0,不同为1.
特点:一个数据(a),被同一个数据(b)位异或两次,值(a)不变。
实例:a^b^b 结果还是 a;
<<:左移,往左移动,右边空缺,空缺位用0补齐。
>>:右移,往右移动,左边空缺,
空缺位怎么补?
最高位0,空缺位补0,最高位是1,空缺位补1.
>>>:无符号右移。往右移动,左边空缺,
空缺位怎么补?
不管最高位是1还是0,都用0补。
总结: 向左(右)移动就是增大(减小)该数据的2的指定次幂。
面试题:
1、交换两个int类型的值。
思路:
第一种:采用第三方变量。(开发中)
第二种:可以采用+法运算。
第三种:采用位运算符。(面试的时候写)
2、请用高效的方式算出: 2乘以8 2*12 2<<3+2<<2
三元(目)运算符
格式:
条件表达式 ? 表达式1 : 表达式2;
执行流程:
看条件表达式的结果是true还是false,
如果是true,执行表达式1,
如果是false,执行表达式2
1、比较两个整数是否相同。
int a = 10;
int b = 20;
boolean b1 = (a==b)?true:false;
2、求三个整数中的最大值。
int a = 10;
int b = 20;
int c = 30;
int max = a>b? (a>c?a:c) : (b>c?b:c);
键盘录入:
步骤:
1、导包(写在类上)
import java.util.Scanner;
2、创建键盘录入对象(写在main函数中的)。
Scanner sc = new Scanner(System.in);
3、调用方法,获取用户输的内容。
int a = sc.nextInt();
流程控制语句:
顺序结构:从上往下,从左往右依次逐行来执行。
sop(5+5+"hello"+5+5);
选择结构:
if语句:
格式1:
格式:
if(条件表达式) {
语句体;
}
执行流程:
A:先计算条件表达式的值,看是true还是false。
如果是true,就执行语句体,
如果是false,不执行语句体。
注意事项:
A:条件表达式的结果只能是boolean类型。
B:如果if控制的语句体是一句,那么大括号可以省略,如果是多句,不能省略。
推荐,永远不要省略。
C:一般来讲,左大括号和分号不能共存。
格式2:
格式:
if(条件表达式) {
语句体1;
} else {
语句体2;
}
执行流程:
A:先计算条件表达式的值,看是true还是false。
如果是true,就执行语句体1,
如果是false,就执行语句体2。
思考:if的第二种格式和三元表达式有什么区别?
能用三元运算符解决的问题,都可以用if来做,反之不成立。
格式3:
格式:
if(条件表达式1) {
语句体1;
} else if(条件表达式2) {
语句体2;
} else if(条件表达式3) {
语句体3;
} else if(条件表达式4) {
语句体4;
}
。。。
else {
语句体5;
}
执行顺序:
A:先判断条件表达式1的结果,看结果是true还是false
如果是true,就执行语句体1,之后if语句结束。
如果是false,就继续判断条件表达式2,看结果是true还是false
如果是true,就执行语句体2,之后if语句结束。
如果是false,就继续判断条件表达式3,看结果是true还是false
。。。。。。。
所有的if都不满足,就走else中的语句体。
键盘录入一个成绩,判断(判断标准见备注)并输出成绩的等级。
90-100 优
80-89 良
70-79 中
60-69 及
0-59 差
第一版:普通版(if语句中有两个判断条件)
第二版:增强版(if语句中只有一个判断条件)
第三版:变态版(用switch语句改进)
if(score>=0 && score<=100) {
switch
} else {
不合法
}
第四版:究极版(用String来改进)
if的嵌套:
switch-case语句:
格式:
switch(表达式) {
case 值1:
语句体1;
break;
case 值2:
语句体2;
break;
.....
default:
语句体3;
break;
}
执行流程:
先计算表达式的值,然后从第一个case进行匹配,能匹配上就执行对应的语句体,
如果所有的case都匹配不上,就执行default中的内容。
注意:
表达式可以放什么?
byte,short,char,int,JDK1.5以后支持枚举,JDK1.7以后支持字符串(String)。
练习题:给定一个值(整数),输出对应星期几
注意事项:
1、case后边只能是常量,不能是变量,多个case不能出现重复值。
2、default可以省略,但是他记录的是所有非正常情况,一般不省略。
3、最后一个break可以省略,对程序的结果没有影响,
其他break如果省略的话,可能发生case穿透的情况。
4、default可以不放在最后,可以放在任意位置,但是一般放在最后。
5、switch语句什么时候结束?
A:遇到break。
B:执行到switch语句的右大括号。
if语句和switch语句有什么区别?
if语句主要用于 做范围 的判断。
switch语句主要用于 做固定值 的判断。
能用switch做的都可以用if来做,反之不行。
循环结构:
for循环:
while循环:
do-while循环:
中午作业:
1、交换两个int类型的变量值。(三个思路都练习下)
2、用三元表达式实现:
A:键盘录入两个数据,比较两个整数是否相同。
B:键盘录入三个数据,求三个整数中的最大值。
练习题:
* A:看程序写结果:
int x = 2;
int y = 3;
switch(x){
default:
y++;
break;
case 3:
y++;
case 4:
y++;
}
System.out.println("y="+y);
* B:看程序写结果:
int x = 2;
int y = 3;
switch(x){
default:
y++;
case 3:
y++;
case 4:
y++;
}
System.out.println("y="+y); |