资源描述
运算符
赋值运算符;
把数据 变量 表达式的结果赋值给其他变量(拷贝) 例子
某班的A学员Java成绩是80分,B学员与A学员成绩相同,输出B学员成绩
注意 是 右边的赋值给左边 是copy
另外 = 还可以和算术运算符合用 += -+*= /= %= a-=b --------------- a=a-b;
连等 执行顺序 从右向左
练习:
1 变量的互换
int num1 = 19;
int num2 = 89;
int temp;
temp = num1;
num1 = num2;
num2 = temp;
System.out.println(num1);
System.out.println(num2);
-----------------------------------
算数运算符;
+ 加运算符
- 减运算符
* 乘运算符
/ 除运算符
% 取模运算(除运算的余数)
++ 增量运算符
-- 减量运算符
注意:
如果对两个整形做除法 结果一定是整形整数 除以0时,将会报运行时错误;如果整数中被除数小于除数,结果将永远为0,所以实际开发时候使用浮点数较好。
求余
绝对值相除;
*左边操作数决定结果的正负
*如果左边小于右边则等于左边
2%5
自增自减运算不自动进行类型提升。
所以:byte b = 12;
byte c = b++;
是对的。
*前缀是先执行自增或自减运算,再运行表达式。
*后缀是先运行表达式,再执行自增或自减运算。
演示 根据天数(46)计算周数和剩余的天数
练习 分解个十百千位
先取模 得到最后的各位 然后再除 再取模
int num = 8461;
int gewei = num % 10; // 分解获得个位数
int shiwei = num / 10 % 10; // 分解获得十位数
int baiwei = num / 100 % 10; // 分解获得百位数
int qianwei = num / 1000; // 分解获得千位数
System.out.println("数字: " + num);
System.out.println("千位数是: " + qianwei);
System.out.println("百位数是: " + baiwei);
System.out.println("十位数是: " + shiwei);
System.out.println("个位数是: " + gewei);
作业 计算两个日期之间的月数 见例子MonthCounter.java
同理 先分解出月数 然后除 得到年
int intYearMon1 = 20095;
int intYearMon2 = 20081;
int intYear1 = intYearMon1/10;
int intYear2 = intYearMon2/10;
int intMonth1 = intYearMon1%10;
int intMonth2 = intYearMon2%10;
int xMonth = (intYear1-intYear2)*12 + (intMonth1-intMonth2);
System.out.println(xMonth);
字符串连接符:将数字与字符串组合连接到一起时,“+”会将数值作为字符串处理,执行字符串连接功能 另外 注意 字符串换行必须使用+;
见例子testadd.java
System.out.println(22+22);
System.out.println("22"+"22");
System.out.println(22+"22");
System.out.println(6+7+'A');
System.out.println(6+7+"A");
System.out.println(6+"A"+7);
------------------------------------------------
关系运算符
= = 等于
! = 不等于
> 大于
< 小于
>= 大于等于
<= 小于等于
instanceof
用来做比较运算
比较后结果:boolean类型
条件结构
程序不可能是从上到下顺序执行的 经常会有选择判断 比如登陆
我们经常会根据某个条件是否成立来选择不同的处理方式这时候可以使用if条件判断语句
v if
令狐冲的Java考试成绩大于90分,师父就奖励他《独孤九剑》剑谱
注意键盘输入的使用;
关键语句
import java.util.Scanner;
Scanner input = new Scanner(System.in);
input.nextInt();
input.nextLine();
v 结合if 讲解逻辑运算符 与或非
1 令狐冲Java成绩大于90分,而且音乐成绩大于80分,师父奖励他
分析: 这时候要判断多个条件了 java中使用逻辑运算符连接条件
运算符 表达式 说明
&& 条件1 && 条件2 仅仅两个条件同时为真,结果为真
|| 条件1 || 条件2 只要两个条件有一个为真,结果为真
! ! 条件 条件为真时,结果为假条件为假时,结果为真
^ 逻辑异或 A ^ B 两边相同则为假
2 Java成绩等于100分,或者音乐成绩大于70分,师父也可以奖励他
3 java成绩不小于90 师傅就可以奖励他
这个问题是当某个条件不成立的时候执行 这里牵涉到了优先级的问题 后面讲
3 单与 单或 短路
短路与(&&)当左边的结果不为真 右边不再运算
短路或 当左边的结果为真 右边不再运算;
if((2<1)&&((1/0)>2)){
System.out.println("yes");
}
v 三目运算符
三目运算符(?:)相当于条件判断,表达式x?y:z用于判断x是否为真,如果为真,表达式的值为y,否则表达式的值为z。
例如:
int x = 5;
int a = (x>3)?5:3;
则a的值为5。如果x = 2,则a的值为3。
v 运算符的优先级问题
令狐冲Java成绩大于90分,而且音乐成绩大于80分,师父奖励他;或者Java成绩等于100分,音乐成绩大于70分,师父也可以奖励他
分析:条件
令狐冲Java成绩大于90分,and 音乐成绩大于80分,
Or
Java成绩等于100分 and 音乐成绩大于70分
score1 > 90 && score2 >80|| score1 == 100 && score2 > 70
这样对吗? 实际运算符是有优先级的 比如+ * 如果是&&高于>那显然会出问题
顺序 运算符
1. 括号,如 ( ) 和 [ ]
2. 一元运算符,如 -(负) +(正)、++、- -和 !
3. 算术运算符,如
a *、/、%、
B + -
4. 关系运算符,如
A >、>=、<、<=、instanceof
B == 和 !=
5. 逻辑运算符,如 &、^、|、&&、|| (这里面按优先级排列)
6. 条件运算符和赋值运算符,如 ? :、=、*=、/=、+= 和 -=
实际按优先级来看 上面写的是没错的 但每次你都要这样分析一遍也太累了
其实在实际的开发中,不需要去记忆运算符的优先级别,也不要刻意的使用运算符的优先级别,对于不清楚优先级的地方使用小括号去进行替代 可惜面试。。。
v if else
如果令狐冲考试成绩大于90分,师父就奖励他《独孤九剑》,否则师父就罚他上思过崖闭关思过
这个可以用两个if 来解决 但更好的是 if else;
v 小结
提问
说出已学过的数据类型有哪些?
举例说明已学过的运算符有哪些?
if和if-else条件结构执行的顺序是什么?
课堂练习;
1 小布什买了一筐鸡蛋,如果坏蛋少于5个,他就吃掉,否则他就去退货
2、 要求用户输入两个数a、b,如果a能被b整除或a加b大于1000,则输出a,否则输出b
v 多重条件结构
对学员的结业考试成绩评测
成绩>=90 :优秀
成绩>=80 :良好
成绩>=60 :中等
成绩<60 :差
这个问题怎么解决?多条if 可以吗
多重结构来解决
if (){}
else if(){}
。。。
else{}
看流程图
Else 可以没有 但必须在最后 elseif 0---多个
他和多条if 的区别
If是无论如何 每条语句都要做判断的 而 else if 则一个条件成立 其他不运行 遇到这种条件 使用多重效率高
注意else if 的顺序 不要出现逻辑错误 要考虑好条件的顺序 ;
成绩>=80 :良好
成绩>=60 :中等
成绩>=90 :优秀
v 补充 :
当只有一条语句的时候 括号可以不写
变量的作用域;
任何一个大括号中都可以声明变量 但变量不能再作用域外使用;
局部变量 和外面的变量可以重名
v switch
令狐冲参加比武大会
如果获得第一名,将出任武林盟主
如果获得第二名,将出任武当掌门
如果获得第三名,将出任峨嵋掌门
否则,将被逐出师门
switch (值){
case 值:{
break;
}
case 值:{
break;
}
Default:{
}
}
int mingCi = 1;
switch (mingCi){
case 1:
System.out.println("出任武林盟主");
break;
case 2:
System.out.println("出任武当掌门");
break;
case 3:
System.out.println("出任峨嵋掌门");
break;
default:
System.out.println("被逐出师门");
}
注意:
1只能是int
2不要忘记break
3 case 不能重复
4 default 可以没有哦 位置也不固定
实际上switch 和elseif 差不多 但 switch只能处理等值 else if 都可以 但当三重以上就是用switch 结构更清晰
练习
1 输入赵本山的考试成绩,显示所获奖励
成绩>=90分,妈妈给他买MP4
成绩==100分,爸爸给他买辆车
90分>成绩>=60分,妈妈给他买本参考书
成绩<60分,什么都不买
注意逻辑
2
张三为他的手机设定了自动拨号
按1:拨爸爸的号
按2:拨妈妈的号
按3:拨爷爷的号
按4:拨奶奶的号
3 输入年 月 输出年月 天数
1 3 5 7 8 10 12 为大月
4 6 9 11为平月
2 月 闰年为29 平年为28 闰年 :能被400整除,或者能被4整除而不能被100整除。
Scanner input=new Scanner(System.in);
Int year = input.nextInt();
Int month = input.nextint();
switch(month)
{. case 9: .
case 4:.
case 6:.
case 11:.
System.out.println("day=30"); //month值为9、4、6、11时,将输出day=30.
break;.
case 2:
. {. if(ans=='Y') . {. System.out.println("是闰年!!29天"); //如果ans是'Y',输出"是闰年!!29天". . }.
else. {. System.out.println("非闰年,28天!!"); //如果ans不是'Y',将输出"非闰年,28天!!". . }. }. break;.
default:.
System.out.println("day=31"); //其他情况下输出"day=31". break;. . }. }. }
展开阅读全文