03-Java运算符和流程控制语句
第一章 运算符
1.1 自增自减运算符
基本用法:(掌握)
不管是写在前面,还是写在后面,只要单独写一行,结果就是一样的。
代码示例:
int a = 1; //后++ a++;//把变量里面的值+1,执行完毕之后,变量里面的值就是2 System.out.println(a);//2 //先++ ++a;//把变量里面的值+1,执行完毕之后,变量里面的值就是3 System.out.println(a);//3 //后-- a--; System.out.println(a);//2 //先-- --a; System.out.println(a);//1
扩展用法:(了解)
先++和后++,以后在实际开发中,我们基本上都是单独写成一行的。
如果实际参与了计算,一般在代码里面是不会写的。
运算规则:
先++:
先加后用
int a = 1; int b = ++a; // 先把变量a的值1,自增变成2. // 再把2拿出来使用,赋值给变量b 所以,程序运行完毕之后,a为2,b为2
后++:
先用后加
int a = 1; int b = a++; // 先把变量a的值进行使用,赋值给变量b // 然后变量a再进行自增 所以,程序运行完毕之后,a为2,b为1
面试题举例:
public class Test { public static void main(String[] args) { int x = 10; //后++,先用后加 //先把x的值10拿出来用,赋值给y,然后x再进行自增变成11 //当这行代码执行完毕之后,x = 11 y = 10 int y = x++; //先++,先加后用 //先把x的值进行自增,变成12,再把自增之后的值拿出来用。赋值给z //当这行代码执行完毕之后,x = 12 z = 12 int z = ++x; //因为x自增了两次就是12 System.out.println("x:" + x);//12 System.out.println("y:" + y);//10 System.out.println("z:" + z);//12 } }
应用场景一:
当过生日的时候,记录age的变量要自增。
变量在合适的时候需要自增一次。
应用场景二:
商城项目中的购物车,也需要用到自增,自减运算符。
应用场景三:
统计数量的时候。
在一开始,我们可以定义一个变量记录0
把所有参与统计的数据,一个一个进行对比,如果满足,变量就自增一次。
当所有参与统计的数据全部统计完毕,那么变量就表示最终的次数。
举例:
1 ~ 100 之间有多少个偶数?
代码中,我们可以从1开始去数到100。如果遇到一个偶数,那么统计的变量就需要自增一次。
当100个数全部统计完毕之后,变量的值就是最终的结果。
具体的代码我们会在后面学习完循环的时候写,现在知道一下应用场景即可。
1.2 赋值运算符
分类:
符号 | 说明 |
---|---|
= | 把等号的右边赋值给左边。int a = 10; |
+= | 把左边和右边进行相加,结果赋值给左边,对右边没有任何影响。 |
-= | 把左边和右边进行相减,结果赋值给左边,对右边没有任何影响。 |
*= | 把左边和右边进行相乘,结果赋值给左边,对右边没有任何影响。 |
/= | 把左边和右边进行相除,结果赋值给左边,对右边没有任何影响。 |
%= | 把左边和右边进行相除,把余数赋值给左边,对右边没有任何影响。 |
代码示例:
//赋值运算符 //基本的赋值运算符 = //其他赋值运算符 //+= -= *= /= %= //以+=为例 int a = 10; int b = 20; //就表示把左右进行相加,把结果赋值给左边的,对右边没有任何影响 //相当于 a = a + b; a += b; System.out.println(a);//30 System.out.println(b);//20
1.3 比较运算符
概念:
比较运算符,又叫做关系运算符,其实就是做了一个判断而已。
分类:
==:判断左右是否相等 !=:判断左右是否不相等 >:判断左边是否大于右边 >=:判断左边是否大于等于右边 <:判断左边是否小于右边 <=:判断左边是否小于等于右边
注意点:
关系运算符的结果只能是布尔类型的,要么是true,要么是false。在后面实际开发中,我们会根据两种情况来执行不同的代码。
用户登录,正确true,登录成功
错误false,登录失败
==千万不能写成一个=
练习:
需求:
您和您的约会对象在餐厅里面正在约会。
键盘录入两个整数,表示你和你约会对象衣服的时髦度。(手动录入0~10之间的整数,不能录其他)
如果你的时髦程度大于你对象的时髦程度,相亲就成功,输出true。
否则输出false。
代码示例:
//分析: //1.键盘录入两个整数 Scanner sc = new Scanner(System.in); System.out.println("请输入你衣服的时髦度"); int fashtion1 = sc.nextInt(); System.out.println("请输入约会对象衣服的时髦度"); int fashtion2 = sc.nextInt(); //2.比较一下即可 boolean result = fashtion1 > fashtion2; System.out.println(result);
1.4 逻辑运算符
1.4.1 而且和或者
分类:
& 逻辑与,建议读作并且、而且。
表示需要同时满足左边和右边才可以。
| 逻辑或,建议读作或者。
表示两边的条件只要满足其中一个就可以了。
代码示例:
//& 而且 //规则:两边都为真,结果才是真。只要有一个为假,结果就是假 System.out.println(true & true);//true System.out.println(false & true);//false System.out.println(true & false);//false System.out.println(false & false);//false // | 或者 //规则:两边都为假,结果才是假,只要有一个为真,结果就是真 System.out.println(true | true);//true System.out.println(false | true);//true System.out.println(true | false);//true System.out.println(false | false);//false
应用场景一:
用户在登录的时候,需要用户名和密码这两个同时输入正确了,那么才是可以的。
此时就是两个条件同时满足,用并且。
应用场景二:
丈母娘跟女婿提要求:需要有房子,或者有车子就可以穿走我的小棉袄。
此时就是两个条件中只要满足其中一个即可,用或者
1.2.2 非/取反
运算规则:
改变true和false的结果。
如果是true,取反之后变成false
如果是false,取反之后变成true
代码示例:
System.out.println(true);//true System.out.println(!true);//false System.out.println(!false);//true
建议:
最多只能用一次。用多了没有任何意义。
代码示例:
System.out.println(!!true);
1.4 短路逻辑运算符
分类:
&& 短路且、短路与
|| 短路或
特点:
只要左边能确定表达式最终的结果,那么右边不会参与计算。
&&:
左边为true,那么右边会参与计算。
左边为false,那么右边不会参与计算。
||:
左边为true,那么右边不会参与计算。
左边为false,那么右边会参与计算。
常用的逻辑运算符:
&& || !
练习:
数字6是一个真正伟大的数字,键盘录入两个整数。
如果其中一个为 6,最终结果输出true。
如果它们的和为 6的倍数。
最终结果输出true。
其他情况都是false。
代码示例:
//1.键盘录入两个整数 Scanner sc = new Scanner(System.in); System.out.println("请输入一个整数"); int a = sc.nextInt(); System.out.println("请输入第二个整数"); int b = sc.nextInt(); //2.a==6 || b==6 || (a + b) % 6 == 0 //三个条件选一个 boolean result = (a == 6) || (b == 6) || ((a + b) % 6 == 0); System.out.println(result);
1.5 三元运算符
三元运算符又叫三元表达式,还有其他名字:问号冒号表达式,三目运算符。
格式:
关系表达式 ? 表达式1 : 表达式2 ;
注意点:
三元运算符的结果一定要被使用,可以赋值给一个变量,或者直接打印输出。
执行流程:
先执行关系表达式。
如果结果为真,执行表达式1,此时表达式1的结果就是整个三元运算符的结果。
如果结果为假,执行表达式2,此时表达式2的结果就是整个三元运算符的结果。
代码示例:
int a = 10; int b = 20; //利用三元表达式求a和b之间的较大值 int max = a > b ? a : b ; System.out.println(max); System.out.println(a > b ? a : b);
1.6 练习 - 两只老虎
需求:
动物园里有两只老虎,体重分别为通过键盘录入获得,请用程序实现判断两只老虎的体重是否相同。
代码示例:
//分析: //1,键盘录入 Scanner sc = new Scanner(System.in); System.out.println("请录入第一只老虎的体重"); int weight1 = sc.nextInt(); System.out.println("请录入第二只老虎的体重"); int weight2 = sc.nextInt(); //2.比较 // String result = 体重1 == 体重2 ? "相同" : "不相同"; String result = weight1 == weight2 ? "相同" : "不相同"; System.out.println(result);
1.7 练习-求三个值的较大值
需求:
一座寺庙里住着三个和尚,已知他们的身高分别为150cm、210cm、165cm,请用程序实现获取这三个和尚的最高身高。
代码示例:
//1.定义三个变量记录和尚的身高 int height1 = 150; int height2 = 165; int height3 = 210; //2.求出任意两个数字的较大值 int temp = height1 > height2 ? height1 : height2; //3.再拿着这个较大值跟第三个数进行比较,求出三个数字的最大值 int max = temp > height3 ? temp : height3; System.out.println(max);
1.8 运算符的优先级
小括号优先于所有。
想要让谁先运行,就把谁给括起来就可以了。
第二章 流程控制语句
在一个程序执行的过程中,各条语句的执行顺序对程序的结果是有直接影响的。所以,我们必须清楚每条语句的执行流程。而且,很多时候要通过控制语句的执行顺序来实现我们想要的功能。
2.1 流程控制语句分类
顺序结构
分支结构(if, switch)
循环结构(for, while, do…while)
2.2 顺序结构
顺序结构是程序中最简单最基本的流程控制,没有特定的语法结构,按照代码的先后顺序,依次执行,程序中大多数的代码都是这样执行的。
顺序结构执行流程图:
2.3 分支结构:if语句
if语句格式1
格式: if (关系表达式) { 语句体; }
执行流程:
①首先计算关系表达式的值
②如果关系表达式的值为true就执行语句体
③如果关系表达式的值为false就不执行语句体
④继续执行后面的语句内容
示例:
public class IfDemo { public static void main(String[] args) { System.out.println("开始"); //定义两个变量 int a = 10; int b = 20; //需求:判断a和b的值是否相等,如果相等,就在控制台输出:a等于b if(a == b) { System.out.println("a等于b"); } //需求:判断a和c的值是否相等,如果相等,就在控制台输出:a等于c int c = 10; if(a == c) { System.out.println("a等于c"); } System.out.println("结束"); } }
练习1:老丈人选女婿
需求:
键盘录入女婿的酒量,如果大于2斤,老丈人给出回应,否则没有任何回应
代码示例:
//分析: //1.键盘录入女婿的酒量 Scanner sc = new Scanner(System.in); System.out.println("请输入女婿的酒量"); int wine = sc.nextInt();//5 //2.对酒量进行一个判断即可 if(wine > 2) { System.out.println("不错哟,小伙子!"); }
练习2:考试奖励
需求:
键盘录入一个整数,表示小明的考试名次,如果名次为1,小红可以当小明的女朋有了。
代码示例:
//分析: //1.键盘录入一个整数,表示小明的考试名次 Scanner sc = new Scanner(System.in); System.out.println("请输入小明的名次"); int rank = sc.nextInt(); //2.对小明的考试成绩进行判断即可 if(rank == 1){ System.out.println("小红成为了小明的女朋友"); }
第一种格式的细节:
-
如果我们要对一个布尔类型的变量进行判断,不要写==,直接把变量写在小括号中即可。
-
如果大括号中的语句体只有一条,那么大括号可以省略不写
如果大括号省略了,那么if只能控制距离他最近的那一条语句。
建议:自己不要去写,如果别人这么写了,你要能看懂即可。
if语句格式2
格式: if (关系表达式) { 语句体1; } else { 语句体2; }
执行流程:
①首先计算关系表达式的值
②如果关系表达式的值为true就执行语句体1
③如果关系表达式的值为false就执行语句体2
④继续执行后面的语句内容
示例:
public class IfDemo02 { public static void main(String[] args) { System.out.println("开始"); //定义两个变量 int a = 10; int b = 20; //需求:判断a是否大于b,如果是,在控制台输出:a的值大于b,否则,在控制台输出:a的值不大于b if(a > b) { System.out.println("a的值大于b"); } else { System.out.println("a的值不大于b"); } System.out.println("结束"); } }
练习1:吃饭
需求:
键盘录入一个整数,表示身上的钱。
如果大于等于100块,就是网红餐厅。
否则,就吃经济实惠的沙县小吃。
代码示例:
//分析: //1.键盘录入一个整数。表示身上的钱。 Scanner sc = new Scanner(System.in); System.out.println("请输入一个整数表示身上的钱"); int money = sc.nextInt(); //2.对钱进行判断 if(money >= 100){ System.out.println("吃网红餐厅"); }else{ System.out.println("福建大酒店"); }
练习2:影院选座
需求:
在实际开发中,电影院选座也会使用到if判断。
假设某影院售卖了100张票,票的序号为1~100。
其中奇数票号坐左侧,偶数票号坐右侧。
键盘录入一个整数表示电影票的票号。
根据不同情况,给出不同的提示:
如果票号为奇数,那么打印坐左边。
如果票号为偶数,那么打印坐右边。
代码示例:
//分析: //1.键盘录入票号 Scanner sc = new Scanner(System.in); System.out.println("请输入票号"); int ticket = sc.nextInt(); if(ticket >= 1 && ticket <= 100){ //合法 //2.对票号进行判断 if (ticket % 2 == 0) { //偶数 System.out.println("坐右边"); } else { //奇数 System.out.println("坐左边"); } }else{ //票号不合法 System.out.println("票号不合法"); }
if语句格式3
格式: if (关系表达式1) { 语句体1; } else if (关系表达式2) { 语句体2; } … else { 语句体n+1; }
执行流程:
①首先计算关系表达式1的值
②如果值为true就执行语句体1;如果值为false就计算关系表达式2的值
③如果值为true就执行语句体2;如果值为false就计算关系表达式3的值
④…
⑤如果没有任何关系表达式为true,就执行语句体n+1。
练习1:考试奖励
需求:
小明快要期末考试了,小明爸爸对他说,会根据他不同的考试成绩,送他不同的礼物,
假如你可以控制小明的得分,请用程序实现小明到底该获得什么样的礼物,并在控制台输出。
分析:
①小明的考试成绩未知,可以使用键盘录入的方式获取值
②由于奖励种类较多,属于多种判断,采用if...else...if格式实现
③为每种判断设置对应的条件
④为每种判断设置对应的奖励
代码示例:
//95~100 自行车一辆 //90~94 游乐场玩一天 //80 ~ 89 变形金刚一个 //80 以下 胖揍一顿 //1.键盘录入一个值表示小明的分数 Scanner sc = new Scanner(System.in); System.out.println("请输入小明的成绩"); int score = sc.nextInt(); //2.对分数的有效性进行判断 if(score >= 0 && score <= 100){ //有效的分数 //3.对小明的分数进行判断,不同情况执行不同的代码 if(score >= 95 && score <= 100){ System.out.println("送自行车一辆"); }else if(score >= 90 && score <= 94){ System.out.println("游乐场玩一天"); }else if(score >= 80 && score <= 89){ System.out.println("变形金刚一个"); }else{ System.out.println("胖揍一顿"); } }else{ //无效的分数 System.out.println("分数不合法"); }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?