知识点:
熟记 JAVA 语法基础 2;
运算规则 运算符(自增自减 短路与 短路或 三目运算符)
一、运算规则(5 条)
1.1 计算结果的数据类型,与最大数据类型一致
System.out.println(3/2);//1 , int/int, 得到的结果类型还是 int
System.out.println(3/2d);//1.5 , int/double 。得到的结果是 double
1.2 byte,short,char 三种比 int 小的整数,运算时会先自动转换成 int
byte a = 1;
byte b = 2;
byte c = (byte)(a+b);
//a+b 会自动提升成 int 类型,右面得运算结果就是 int 大类型,给左面的 byte 小类型赋值,不可以,需要强转。
1.3 整数运算溢出
整数运算,类似于一个钟表,转到最大时,再转会回到最小。
计算:光速运行一年的长度是多少米? 3 亿 m/s
// 溢出的现象:因为做了大的整型数据的运算,会超出 int 取值范围。解决方法:把整数提升成 long 类型。
System.out.println(300000000L*60*60*24*365);
1.4 浮点数运算不精确
1-0.8 ( 这是一个现象)
1.5 浮点数的特殊值
Infinity 无穷大 3.14/0
NaN not a number 0/0.0 或 0.0/0
二、运算符
2.1 概述
运算符 用于连接 表达式 的 操作数,并对操作数执行运算。
例如,表达式 num1+num2,其操作数是 num1 和 num2,运算符是”+”。
在 java 语言中,运算符可分为 5 种类型:
算术运算符、赋值运算符、关系运算符、逻辑运算符、位运算符。
根据操作数的不同,运算符又分为单目运算符、双目运算符和三目运算符。
单目运算符只有一个操作数,双目运算符有两个操作数,三目运算符则有三个操作数。
位运算符涉及到二进制位的运算,在 java 程序中运用不是很多。
2.2 运算符速查表
2.2.1 算术运算符之自增自减运算符
a 是操作数,++是自增运算符,--是自减运算符,自增和自减运算符即可以放在变量的前面,也可以放在变量的 后面,例如:a++、++a、a--、--a 等。
自增(++):将变量的值加 1
分前缀式(如++a)和后缀式(如 a++)。前缀式是先加 1 再使用;后缀式是先使用再加 1。
自减(--):将变量的值减 1
分前缀式(如--a)和后缀式(如 a--)。前缀式是先减 1 再使用;后缀式是先使用再减 1。
2.2.2 逻辑运算符
逻辑运算符连接两个关系表达式或布尔变量,用于解决多个关系表达式的组合判断问题
注意逻辑运算符返回的运算结果为布尔类型
通常,我们用 0 表示 false,用 1 表示 true
与:表示并且的关系
单与&: 1 & 2 ,结果想要是 true,要求 1 和 2 都必须是 true
双与/短路与&&:1 && 2 ,当 1 是 false 时,2 会被短路,提高程序的效率
或:表示或者的关系
单或|: 1 | 2,结果想要是 true,要求 1 和 2 只要有一个为 true 就可以
双或/短路或||:1 || 2,当 1 是 true 时,2 会被短路,提高程序效率
TIPS:当一个表达式包含多个运算符时,就需要考虑运算符的优先级,优先级高的运算符先参与运算,优先级低的 运算符后参与运算。在实际的开发中,不需要特别去记忆运算符的优先级别,也不要刻意的使用运算符的优先级别,对于不清楚优先级 的地方使 用小括号辅助 进行优先级管理。
2.3 练习 1:测试自增自减
创建 Java 工程: DAY03
创建包: cn.tedu.basic
创建类: Test1_Operator.java
package cn.mbh.basic;
/**
*@author MBH:
*@version 创建时间:2022年7月2日 下午10:01:32
*/
/**本类用于测试运算符自增自减*/
public class Test1_Operator {
public static void main(String[] args) {
//符号在前,先变化再使用
//符号在后,先使用再变化
int a = 1;
System.out.println(a++);//此时,a++的值为1
System.out.println(a);//总输出的a的值为1+1=2
int b = 1;
System.out.println(++b);//此时,++b的值为2
System.out.println(b);//总输出的b的值为2
System.out.println(++a+a+b++);//3+3+2=8
int c = 1;
System.out.println(c--);//此时,c--的值为1
System.out.println(c);//总输出的c的值为0
int d = 1;
System.out.println(--d);//此时,--d的值为0
System.out.println(d);//总输出的d的值为0
System.out.println(--c-c-c--);//-1-(-1)-(-1)=1
}
}
2.4 练习 2:求两数的最大值
创建类: Test2_MaxNum.java
package cn.mbh.basic;
import java.util.Scanner;
/**
*@author MBH:
*@version 创建时间:2022年7月2日 下午10:11:52
*/
/**本类用于测试求两个数的最大值*/
public class Test2_MaxNum {
public static void main(String[] args) {
//1、接收键盘输入的两个整数
System.out.println("请输入要比较的第一个数:");
int a = new Scanner(System.in).nextInt();
System.out.println("请输入要比较的第二个数:");
int b = new Scanner(System.in).nextInt();
//2、比较,用三元运算符比较 1 ? 2 : 3
int max = a > b ? a : b;
System.out.println("两个数的最大值是:"+max);
}
}
2.5 练习 3:求平年闰年
创建类: Test3_Year.java
需求:接收用户输入的年份,判断是平年还是闰年
package cn.mbh.basic;
import java.util.Scanner;
/**
*@author MBH:
*@version 创建时间:2022年7月2日 下午10:14:57
*/
public class Test3_Year {
/**本类用于接收用户输入的年份,判断是平年还是闰年*/
/*
* 如果年份是闰年,只要满足以下两条件其中之一即可:
* 1.能被4整除,并且不能被100整除
* 2.能被400整除
*/
public static void main(String[] args) {
//1.提示并接收用户输入的年份
System.out.println("请输入要判断的年份:");
int year = new Scanner(System.in).nextInt();
String result = "平年";//设置默认值,假设每年都是平年
//2.判断用户输入的年份是否满足闰年的条件
//2.1判断结构:if(判断条件){满足条件的代码}
/**第一种写法:*/
// if(year%4==0){//能被4整除
// if(year%100 != 0){//并且不能被100整除
// result = "闰年";//修改默认值
// }
// }
// if(year%400 == 0){//能被400整除
// result = "闰年";//修改默认值
// }
/**第二种优化写法:*/
// 1.能被4整除,并且不能被100整除
// 2.能被400整除0
//if( (小判断条件1 && 小判断条件2 ) || 判断条件2){满足条件的代码}
//if( (能被4整除 && 不能被100整除 ) || 能被400整除){
if( (year%4==0 && year%100 != 0 ) || year%400 == 0){
result = "闰年";//修改默认值
}
System.out.println(year+"年是"+result);
}
}
三、分支结构
3.1 概述
顺序结构的程序虽然能解决计算、输出等问题
但不能做判断再选择。对于要先做判断再选择的问题就要使用分支结构
3.2 形式
当判断条件成立时 ( 返回 true) ,才会执行代码 …
单分支
if(判断条件 ){ 代码 }
多分支
if(判断条件 ){
代码 1
}else{
执行不满足条件的代码 2
}
嵌套分支
if(判断条件 1){
代码 1
}else if(判断条件 2){
执行不满足条件的代码 2
}else if(判断条件 3){
执行不满足条件的代码 3
}else{
执行谁都不满足条件的代码 4
}
3.3 练习 4:商品打折案例
创建类: Test4_ Discount.java
需求: 接收用户输入的原价。满 1000 打 9 折;满 2000 打 8 折;满 5000 打 5 折
package cn.mbh.basic;
import java.util.Scanner;
/**
*@author MBH:
*@version 创建时间:2022年7月2日 下午10:20:25
*/
/**本类用于测试商品打折案例*/
public class Test4_Discount {
public static void main(String[] args) {
//1.提示并接收用户输入的原价
System.out.println("请输入商品原价");
double price = new Scanner(System.in).nextDouble();
//2.计算折后价
//2.1定义变量count来保存折后价,初始值为原价
double count = price;
if(price >= 5000){//满5000。
count = price * 0.5;//打5折
}else if(price >= 2000){ //满2000
count = price * 0.8;//打8折
}else if(price >= 1000){ //满1000打9折
count = price * 0.9;
}
System.out.println("原价是:"+price+",折后价是:"+count);
}
}
四、拓展补充:
Eclipse 快捷键
Ctrl+D: 删除当前行
Ctrl+Alt+↓ 复制当前行到下一行(复制增加)
Ctrl+Alt+↑ 复制当前行到上一行(复制增加)
Alt+↓ 当前行和下面一行交互位置(特别实用,可以省去先剪切,再粘贴了)
Alt+↑ 当前行和上面一行交互位置(同上)
Alt+← 前一个编辑的页面
Alt+→ 下一个编辑的页面(当然是针对上面那条来说了)
Ctrl+L 定位在某行 (对于程序超过 100 的人就有福音了)
shift+回车,下面添加空行
ctrl+shift+回车,上面添加空行
Ctrl+/ 注释当前行,再按则取消注释
Ctrl+Shift+/ 注释当前段落,再按则取消注释
Ctrl+Shift+X 把当前选中的文本全部变为大写
Ctrl+Shift+Y 把当前选中的文本全部变为小写
Ctrl+Shift+F 格式化当前代码