Day03目标
-
掌握算术运算符
-
掌握关系运算符、逻辑运算符
-
掌握赋值运算符、字符串连接运算符、条件运算符
-
理解分支结构的应用场景
-
掌握三种分支结构:if,if…else…,if… else if…
-
预计代码量:课上:180行;课下:360行
运算符:
算术运算符:
-
算术运算符是进行算术运算的运算符,包括“+,-,*,/,%, ++, --”
- %:取模/取余,商之后剩下的数即为余数,余数为0即为整除
System.out.println(5 % 2); // 1,商2余1 System.out.println(2 % 5); // 2,商0余2 System.out.println(8 % 2); // 0,商4余0 System.out.println(0 % 5); // 0,商0余0
-
++/–:自增1/自减1,即在本身基础之上增1/减1(a = a + 1 和 a = a - 1)
-
++/–可以写在变量前,也可以写在变量后(a++ 或 ++a,要分两种不同情况来理解)
- 情况1:++/-- 单独使用时,写前写后没区别
int a = 5, b = 5; a++; // 相当于 a = a + 1 ++b; // 相当于 b = b + 1 System.out.println(a); // 输出解果:6 System.out.println(b); // 输出解果:6
- 情况2:++/-- 被使用时,写前写后有关系
int a = 5, b = 5; int c = a++; // 先将a++的值赋值给c,后a自增变为6 int d = ++b; // 先b自增变为6,再将6赋值给d System.out.println(a); // 6 System.out.println(b); // 6 System.out.println(c); // 5 System.out.println(d); // 6
-
–与++同理:
- 单独使用时,写前面和谐在后面都一样,都是自减1
int a = 5, b = 5; a--; --b; System.out.println(a); // 4 System.out.println(b); // 4
- 被使用时,写在前和写在后不一样
int a = 5, b = 5; int c = a--; // 先将a++的值赋值给c,后a自增变为4 int d = --b; // 先b自减变为4,再将4赋值给d System.out.println(a); // 4 System.out.println(b); // 4 System.out.println(c); // 5 System.out.println(d); // 4
关系运算符
-
关系运算符时进行关系运算的运算符
-
(大于)、<(小于)
-
=(大于等于)、<=(小于等于)
-
==(等于)、!=(不等于)
-
-
关系运算的结果为boolean型,关系成立则为true,反之则为false
int a = 5, b = 10, c = 6;
boolean b1 = a > b; // b1的值为false
boolean b2 = c <= b; // b2的值为true
注:一般结合算数运算一同运算,先进行关系运算,后进行逻辑运算,最后做赋值运算
逻辑运算符
-
逻辑运算符时进行逻辑运算的运算符
- 常用于多条件运算之中(考试及格并且**出勤率达到80%**才能顺利毕业)
-
&&:逻辑与(并且、同时满足所有条件)
条件1 考试及格了吗? | true | true | false | false |
---|---|---|---|---|
&& | ||||
条件2 出勤率够80%吗? | true | false | true | false |
结果:能否毕业? | true | false | false | false |
- ||:逻辑或(或者),有真则为真,见true则true
条件1 有现金吗? | true | true | false | false |
---|---|---|---|---|
条件2 有微信吗 | true | false | true | false |
结果:能否结账 | true | true | true | false |
- !:逻辑非(取反),非真则假,非假则真
! | false | true |
---|---|---|
下雨了吗? | true | false |
短路与和短路或
-
&&:短路与(并且),两边都为真则真,见到false则false
- 当第一个条件为false时,则发生短路(后面无论多少条件都不再执行)
int a = 5, b = 10, c = 5; boolean b3 = a > b && c++ > 2; // 由于前面的条件是false,但是发生了短路,导致系统不再执行条件2(c++),所以不进行自增 System.out.println(b3); // false && true = false System.out.println(c); // 结果:5,且无论有几次都为5,是由于短路与造成的
-
||:短路或(或者),有真则为真,见true则true
- 当第一个条件为true时,不再执行后面的条件,直接返回true
int a = 5, b = 10, c = 5; boolean b3 = a < b || c++ < 2; // 由于前面的条件是true,但是发生了短路,导致系统不再执行条件2(c++),所以不进行自增 System.out.println(b3); // true && false = true System.out.println(c); // 结果:5,且无论有几次都为5,是由于短路或造成的
-
当“与”或“或”不写成“&&”和“||”,而写成:“&”和“|”时,则不再短路。但是,在实际开发过程通常使用短路
赋值运算符
-
赋值运算符是用于给变量赋值的运算符
-
简单赋值运算符
=
-
扩展赋值运算符
+=、-=、*=、/=、%=
在本身基础上做操作,本身自带强转功能(转成被赋值的变量的数据类型)int a = 5; a += 10; // 相当于a = (int)(a + 10) System.out.println(a); // 15
-
字符串连接运算符
-
字符串连接运算符是进行字符串连接的运算符
-
+
-
若两边位数字,则做加法运算
-
若两边出现了字符串,则做字符串连接
- 字符串:一串字符,放在双引号中,长度没有限制
-
int age = 39;
System.out.println("age="); // 输出结果:age=
System.out.println(age); // 输出结果:39
// 此时我想把他们两个连接到一块,于是引入字符串连接运算符
System.out.println("age=" + age); // 输出结果:age=39
条件运算符
-
条件运算符,也叫三目运算符
-
语法:
boolean 表达式 ? 表达式1 : 表达式2
-
执行过程:
-
整个条件运算是有值的,它的值要么是表达式1的值,要么是表达式2的值
-
如果boolean表达式 → true → 返回表达式1的值
-
如果boolean表达式 → false → 返回表达式2的值
int num = 5; int flag = num > 0 ? 1 : -1; System.out.println(flag); // 1
int a = 8, b = 5; int max = a > b ? a : b;
-
分支结构
分支结构的应用
-
任何复杂的程序逻辑,都可以通过三种结构来实现:
-
顺序结构:从上向下逐行执行,每一句都必须执行;
-
分支结构:有条件的执行某语句,而并非是每一句都必须执行;
-
循环结构:…(Day04再说)
-
分支结构的分类
-
分支结构共分为四类:
-
if结构:1条路;
-
if…else结构:2条路;
-
if…else if结构:多条路;
-
switch…case结构:…(Day04再说)
-
-
更好的理解:
-
需求1:满500打8折 —— if结构
-
需求2:满500打8折 ,不满500打9折 —— if…else结构
-
需求3:满1000打7折,满500不满1000打8折,不满500打9折 —— if…else if结构
-
if结构
-
语法:
if (boolean) { // 语句块 }
-
if结构案例:
// 满500打8折 double price = 300.0; // 消费金额 if(price >= 500) { // boolean看是否达到500元 price *= 0.8; // true执行内部语句块:打八折 } System.out.println(price); // 打印最终价格
if…else结构
- 语法:
if (boolean) {
// 语句块1
} else {
// 语句块2
}
注意:语句块1和语句块2,必走其中之一
- if…else结构案例:
// 满500打8折,不满打9折
double price = 600.0; // 消费金额
if (price >= 500.0) {
price *= 0.8; // 打8折
} else {
price *= 0.9; // 打9折
}
System.out.println("最终金额为:" + price);
if…else if结构
- 语法:
if (boolean-1) {
// 语句块1
} else if (boolean-2) {
// 语句块2
} else if (boolean-3) {
// 语句块3
} else{
// 语句块4
}
- if…else if结构案例
// 满2000打5折,满1000不满2000打7折,满500不满1000打8折,不满500打9折
double price = 6000.0;
if (price >= 2000) {
price *= 0.5;
} else if (price >= 1000 && price < 2000) { // price < 2000 没有用,如果可以再上一个if结构中已经推出了循环
price *= 0.7;
} else if (price >= 500 && price < 1000) { // // price < 1000 没有用,如果可以再上一个if结构中已经推出了循环
price *= 0.8;
} else if (price <500) { // if (price <500) 没有用,因为上面已经筛干净了,没有必要增加冗余代码
price *= 0.9;
}
System.out.println("最终金额为:" + price);