运算符,分支结构

运算符,分支结构

1. 运算符

1.1 算术运算符
数学:
	+ - × ÷ () = 
	要求:
		1. 先乘除后加减
		2. 有括号先处理括号内容
		3. 0 不能作为除数
		4. 从左至右执行
		
开发中使用的算术运算符:
	+ - * / % () =
	% 取余
		5 ÷ 2 = 2 ... 1 ==> 5 % 2 = 1 
// 算术运算符演示
class Demo1 {
	public static void main(String[] args) {
		// 定义两个 int 类型变量
		int num1 = 10;
		int num2 = 20;
		
		/*
		注意事项:
			1. 在代码运行过程中,变量存储数据内容有可能会随着代码执行发生改变。
			2. 变量存储数据有且只能是在被赋值的情况下才可以改变,未赋值不变
		*/
		num1 = num1 + num2; // num1 = 30 num2 = 20
		num1 = num1 * num2; // num1 = 600 num2 = 20
		num1 = num1 - num2; // num1 = 580 num2 = 20;
		num1 = num1 / num2; // num1 = 29 num2 = 20;
		num1 = num1 % num2; // num1 = 9 num2 = 20;
		
		System.out.println(num1);
		System.out.println(num2);	
	}
}
1.2 增强版运算符
+= -= *= %= /=
案例:
	int num1 = 10;
	int num2 = 20;
	
	num1 = num1 + num2; ==> num1 += num2;

优势:
	1. 减少变量书写,避免错误!!!
	2. 带有一定的特殊功能,包含隐含类型转换!!! 
1.3 自增自减运算符
【建议】
	1. 自增自减充满了歧义性,开发中尽量减少自增自减运算符使用。
	2. 推荐使用 += 1 和 -= 1 替代自增自减运算符。
	3. 自增自减运算符操作单独成行

【语法要求】
	1. 自增自减运算符有且只可以操作【变量】
	2. 自增自减运算符在变量之前或者变量之后有不同的效果。

【语法效果】
	1. 自增自减运算符在变量之后,首先取值变量保存数据内容,参与当前行代码执行,再来执行自增自减操作
	2. 自增自减运算符在变量之前,首先执行自增自减操作,对变量数据进行修改,再取值变量保存数据内容,参与当前行代
	码执行。
// 面试题1
int num = 5;
int ret = num++ * ++num;

num = ? 7   
ret = ? 35  
/*
num++ 首先取值 num 数据参与表达式运算 取值内容为 5 
	num自增操作 ==> 6

++num 首先自增操作,num ==> 7
	取值num存储结果参与表达式运算 7
ret = 5 * 7 ==>35
*/
// 面试题2
int num = 5;
++(num++)++;

num = ERROR 【语法错误】
/*
分析问题:
	1. 自增自减运算符有且只可以操作【变量】
	2. ()里面的内容是一个整体,可以认为是一个【常量】
	语法冲突!!!报错!!!
*/
1.4 关系运算符
格式:	
	> < >= <= == !=
对外数据形式:
	boolean true or false 
	关系运算符两边的数据结果满足关系运算符所需,结果为 true,否则为 false
// 关系运算符
class Demo3 {
	public static void main(String[] args) {
		boolean ret = 5 > 3;
		System.out.println(ret); // true
		
		ret = 5 < 3;
		System.out.println(ret); // false 
		
		ret = 5 >= 5;
		System.out.println(ret); // true 
		
		ret = 5 <= 15;
		System.out.println(ret); // true 
		
		ret = 5 != 15;
		System.out.println(ret); // true 
		
		ret = 5 == 15;
		System.out.println(ret); // false 
	}
}
1.5 逻辑运算符
&& 与
	同真为真,有假【即】假
	
|| 或
	有真【即】真,同假为假

! 非 犟 取反
	真变假,假变真
// 逻辑运算符
class Demo4 {
	public static void main(String[] args) {
		boolean ret = 10 > 5 && 5 > 1;
		System.out.println(ret); // true
		
		ret = 10 > 5 && 1 > 5;
		System.out.println(ret); // false
		
		ret = 10 > 5 || 1 > 5;
		System.out.println(ret); // true
		
		ret = 10 < 5 || 1 > 5;
		System.out.println(ret); // false
		
		ret = !(5 > 5);
		System.out.println(ret); // true
		
		ret = !(5 == 5);
		System.out.println(ret); // false
	}
}
1.6 逻辑运算符短路原则
后期可以利用逻辑运算符短路原则,进行条件排列,提高开发效率,提高运行效率
int num = 10;
boolean ret = 10 > 50 && ++num > 5;

ret = false;
num = 10;

/*
逻辑与 同真为真,有假【即】假
逻辑与短路原则:
	逻辑与表达式,出现 false 条件,整个表达式结果已明确为 false,计算机为了提高效率,从 false 条件开始,之后的表达式不再执行。
*/
int num = 10;
boolean ret = 10 > 5 || ++num > 5;

ret = true;
num = 10;
/*
逻辑或 有真【即】真,同假为假
逻辑或短路原则:
	逻辑或表达式,出现 true 条件,整个表达式结果已明确为 true,计算机为了提高效率,从 true 条件开始,之后的表达式不再执行。
*/
1.7 运算符练习题
1. 完成判断是否为大写字母条件
// 'A' <= ch <= 'Z' 开发中不可以使用!!!
char ch = 'B';
ch >= 'A' && ch <= 'Z';
2. 完成判断是否为小写字母条件
char ch = 'g';
ch >= 'a' && ch <= 'z';
3. 完成判断是否为英文字母条件
char ch = 'A';
ch >= 'A' && ch <= 'Z' || ch >= 'a' && ch <= 'z' 
    正确 逻辑与运算符优先级高于逻辑或
(ch >= 'A' && ch <= 'Z') || (ch >= 'a' && ch <= 'z') 
    正确 小括号可以将条件看作是一个整体,同时优先运行
4. 完成判断是否为数字字符条件
char ch = '3';
ch >= '0' && ch <= '9';
5. 完成判断一个年份是否为 闰年
/*
1. 可以被 4 整除,但是不可以被 100 整除
2. 可以被 400 整除
year % 4 == 0
year % 100 != 0
year % 400 == 0
*/
int year = 2008;
year % 4 == 0 && year % 100 != 0 || year % 400 == 0

2. 分支结构

2.1 生活中案例
游戏 Rank 分
	1000 <= Rank <= 1200 黄铜
	1200 < Rank <= 1400 白银
	1400 < Rank <= 1600 黄金
	1600 < Rank <= 1800 铂金
	1800 < Rank <= 2000 钻石
	2000 < Rank <= 2200 大师
	2200 < Rank 王者

购物 VIP 等级
	100 <= money < 500 铁牌会员
	500 <= money < 1000 铜牌会员
	1000 <= money < 5000 银牌会员	
	5000 <= money < 20000 金牌会员
    20000 <= money  黑钻会员
2.2 if 分支
// 格式:
if (/* 条件判断 boolean true or false */) {
	// if 之后为 true 执行大括号内容 
}
/*
执行流程:
	当前程序执行到 if 分支结构,首先判断 if 之后的条件是否为 true,如果为 true 执行大括号中的代码内容,如果为 false 跳过分支结构,执行之后的代码
*/
// if 分支结构
class Demo5 {
	public static void main(String[] args) {
		// int num = 1;
		boolean flag = false;
		
		// if (num > 5) {
		if (flag) {
			System.out.println("我想吃擀面皮");
		}
		
		System.out.println("螺洲螺蛳粉+臭豆腐+鲱鱼罐头");
	}
}
2.3 if else 分支
// 格式
if (/* 条件判断 boolean true or false */) {
    // true 语句体
} else {
    // false 语句体
}
/*
执行流程:
	当前程序运行到 if else 分支结构,首先判断 if 之后小括号里面的内容是否为 true,如果为 true 执行 true 语句体,如果为 false 执行 false 语句体
*/
// if else 分支结构
class Demo6 {
	public static void main(String[] args) {
		boolean flag = false;
		
		if (flag) {
			System.out.println("郑州公交车 YYDS");
		} else {
			System.out.println("武汉公交表示不服");
		}
	}
}
2.4 if else-if 分支
// 格式
if (/* 条件匹配 1 */) {
    // 处理方式 1
} else if (/* 条件匹配 2 */) {
    // 处理方式 2
} else if (/* 条件匹配 3 */) {
    // 处理方式 3
} else {
    // 无条件匹配的最终处理方式
}
/*
执行流程:
	当前程序运行到 if else-if 结构,匹配 if 之后的条件,如果有匹配项,执行对应处理方式,如果没有任何一个条件匹配,执行 else 中的最终处理方式

学生成绩:
	100制
	90以上 秀儿
	80以上 良儿
	70以上 中儿
	60以上 过儿
	60以下 让你爹穿着拖鞋来学校一趟
*/
// if else-if
class Demo7 {
	public static void main(String[] args) {
		int score = 59;
		
		if (score >= 90) {
			System.out.println("秀儿");
		}
		} else if (score >= 70) {
			System.out.println("中儿");
		} else if (score >= 60) {
			System.out.println("过儿");
		} else {
			System.out.println("让你爹穿着拖鞋来学校一趟");
		}
	}
}
【补充知识点 从键盘上获取用户输入的数据】
Scanner 使用,不允许学会,只允许复制粘贴(CV)
1. 导包 
在 class 上方 复制粘贴一下内容 
	import java.util.Scanner;

2. 创建 Scanner 变量 固定格式
	Scanner sc = new Scanner(System.in);
	
3. 选择合适的工具
	int类型数据获取
		int类型变量 = sc.nextInt();
	float类型数据获取
		float类型变量 = sc.nextFloat();
	double类型数据获取
		double类型变量 = sc.nextDouble();
	char类型数据获取
		char类型变量 = sc.nextLine().charAt(0);
【补充知识点 用户友好性提示】
给予用户友好性提示
【补充知识点 用户输入数据合法性判断】
需要对用户输入数据进行判断,是否满足当前需求
// if else-if

// 导包
import java.util.Scanner;

class Demo7 {
	public static void main(String[] args) {
		int score = 59;
		// 创建 Scanner 变量 sc
		Scanner sc = new Scanner(System.in);
		
		System.out.println("请输入学生的成绩:");
		// 通过该 sc 调用 nextInt() 方法从键盘上获取 int 类型数据
		score = sc.nextInt();
		
		// 用户输入数据合法性判定
		if (score > 100 || score < 0) {
			// 给予用户操作失败友好提示
			System.out.println("亲, 您输入的数据有误哦~~啾咪 (づ ̄3 ̄)づ╭?~");
			
			// 终止程序运行
			System.exit(0);
		}
		
		if (score >= 90) {
			System.out.println("秀儿");
		} else if (score >= 80) {
			System.out.println("良儿");
		} else if (score >= 70) {
			System.out.println("中儿");
		} else if (score >= 60) {
			System.out.println("过儿");
		} else {
			System.out.println("让你爹穿着拖鞋来学校一趟");
		}
	}
}
posted @ 2022-02-26 14:11  qtyanan  阅读(103)  评论(0编辑  收藏  举报