运算符
运算符和表达式概述
- 运算符:对字面量或者变量进行操作的符号;
- 表达式:用运算符把字面量或者变量连接起来符合java语法的式子就可以称为表达式。 不同运算符连接的表达式体现的是不同类型的表达式。
举例说明:
int a = 10;
int b = 20;
int c = a + b;
+ :是运算符,是算术运算符
a + b:是表达式,由于+是算术运算符,所以这个表达式叫算术表达式
算术运算符
算术运算符
注意事项:
- / 和 % 的区别:两个数据做除法,/ 取结果的商,% 取结果的余数;
- 整数操作只能得到整数,要想得到小数,必须有浮点数参与运算。
案例
数值拆分
需求:定义一个三位数,将其拆分为个位、十位、百位后,输出在控制台
举例:int number = 123;
在控制台输出结果:
个位是:3
十位是:2
百位是:1
分析:
① 个位的计算:数值 % 10
123 除以 10(商12,余数为3)
② 十位的计算:数值 / 10 % 10
123 除以 10 (商12,余数为3,整数相除只能得到整数)
12 除以 10 (商1,余数为2)
③ 百位的计算:数值 / 10 / 10 % 10
123 / 10 / 10 % 10(123 / 10 得到12,12 / 10 得到1,1 % 10 得到 1)
/*
案例: 数值拆分
java中两个整数相除: 结果只取商
java中两个整数取余: 结果只取余数
*/
public class Demo01 {
public static void main(String[] args) {
//定义变量
int num = 123;
//数值拆分
int ge = num % 10; //123%10=12..3
int shi = num / 10 % 10; //123/10=12%10=1..2
int bai = num / 100 % 10; //123/100=1
//int qian = num / 1000 % 10;
//做后续操作 (打印结果)
System.out.println("个位:" + ge);
System.out.println("十位:" + shi);
System.out.println("百位:" + bai);
}
}
“+” 操作的三种情况:
- 数字相加
- 字符相加
- 字符串相加
数字相加
隐式转换
把一个表示数据范围小的数值或者变量赋值给另一个表示数据范围大的变量
强制转换
- 把一个表示数据范围大的数值或者变量赋值给另一个表示数据范围小的变量
- 格式:数据类型 变量名 = (目标数据类型)(数值或者变量)
字符相加
拿字符在计算机底层对应的数值来进行计算的
- ‘A’ 65 A-Z是连续的
- ‘a’ 97 a-z是连续的
- ‘0’ 48 0-9是连续的
字符串相加
当“+”操作中出现字符串时,这个“+”是字符串连接符,而不是算术运算
- “zhongguo”+ 666
- 运行结果:zhongguo666
当连续进行“+”操作时,从左到右逐个执行
- 1 + 9999 + “岁zhongguo”
- 运行结果:10000岁zhongguo
赋值运算符
赋值运算符
注意事项:扩展的赋值运算符隐含了强制类型转换。
流程控制语句
流程控制语句概述
顺序结构
顺序结构是程序中最简单最基本的流程控制,没有特定的语法结构,按照代码的先后顺序,依次执行。
选择结构
选择结构
- if语句
- switch语句
if 语句
根据判定的结果(真或假)决定执行某个分支的代码
应用场景:无人驾驶汽车过马路
- 交通信号灯由红灯、绿灯、黄灯组成。红灯表示禁止通行,绿灯表示准许通行,黄灯表示警示
- 红灯停、绿灯行、黄灯亮了等一等
if语句格式1
if 语句格式2
if 语句格式3
案例
交通信号灯
需求:交通信号灯由红灯、绿灯、黄灯组成,请通过程序实现不同的信号灯给出不同的提示。 提示信息:红灯停、绿灯行、黄灯亮了等一等
分析:
① 用哪种类型来表示信号灯的三种状态呢?
用int类型来表示信号灯的三种状态(1表示红灯,2表示绿灯,3表示黄灯)
② 用if语句的哪种格式来实现该需求呢?
一般来说:1种情况的判断用if格式1,2种情况的判断用if格式2,多种情况的判断用if格式3
③ if语句判断的表达式该怎么写呢?
int light = 1;
if(light == 1) {…}
==:是关系运算符,用来判断两个数据是否相等,如果相等,结果为true,否则为false
实现步骤:
① 定义一个int类型的变量用来表示信号灯的状态(1表示红灯,2表示绿灯,3表示黄灯)
② 用if语句格式3进行多种情况的判断
③ 根据不同的情况给出不同的提示信息
/*
格式3:
案例: 交通信号灯
*/
public class Demo02 {
public static void main(String[] args) {
int light = 1; //红灯
//light = 2; //绿灯
//light = 3; //黄灯
//light = 4; //出现故障
//根据light的值不同,打印不同结果
if (light == 1) {
System.out.println("红灯停");
} else if (light == 2) {
System.out.println("绿灯行");
} else if (light == 3) {
System.out.println("黄灯注意");
} else if(light == 4){
System.out.println("故障");
}
}
}
奇偶数
需求:给定一个整数,请用程序实现判断该整数是奇数还是偶数,并在控制台输出该整数是奇数还是偶数 提示:偶数是能够被2整除的整数
分析:
① 如何判断一个整数是奇数还是偶数?
整数对2进行取余,余数为0是偶数,否则为奇数
② 用if语句的哪种格式来实现该需求呢?
该整数要么是偶数,要么是奇数,2种情况,所以用if语句格式2
实现步骤:
① 定义一个int类型的整数
② 用if语句格式2进行判断
③ 根据是否是偶数给出不同的提示信息
/*
需求: 使用程序,判断一个整数的奇偶数,打印结果
if(条件){
满足才会走这里;
}
if(条件){
满足才会走这里;
}else{
不满足才会走这里;
}
*/
public class Demo03 {
public static void main(String[] args) {
System.out.println("程序开始");
//定义变量
int num = 11;
num = 12;
//判断条件, 如果能被2整除, 代表是偶数, 反之则是奇数
if(num % 2 == 0){
System.out.println("偶数");
} else {
System.out.println("奇数");
}
System.out.println("程序结束");
}
}
手机以旧换新
需求:张三想买一台7988元的新手机,他的旧手机在二手市场能卖1500元,而手机专卖店推出以旧换新优惠,把他旧手机交给店家,新手机就能够打8折优惠。为了更省钱,要不要以旧换新?请通过程序告诉张三
分析:
① 计算不使用以旧换新的花费
7988 - 1500
② 计算使用以旧换新的花费
7988 * 0.8
③ 用if语句的哪种格式来实现该需求呢?
if语句格式2
实现步骤:
① 定义变量(money1)纪录不使用以旧换新的花费
② 定义变量(money2)纪录使用以旧换新的花费
③ 用if语句格式2进行判断 money1是否大于money2
④ 根据判断结果,给出相应的提示
/*
需求: 手机以旧换新
*/
public class Demo04 {
public static void main(String[] args) {
//1.计算以旧换新的价格
double money2 = 7988 * 0.8;
//2.计算不使用以旧换新的价格
int money1 = 7988 - 1500;
//3.使用if语句判断
if(money2 < money1){
//4.打印结果
System.out.println("以旧换新");
}else {
System.out.println("不使用以旧换新");
}
}
}
switch语句
格式说明:
- 表达式:可以是byte类型,short类型,int类型,char类型
JDK5之后可以是枚举类型,JDK7之后可以是String类型 - case:后面跟的是要和表达式进行比较的值
- break:表示中断,结束的意思。用来结束switch语句
- default:所有值都不匹配的时候,执行该处内容。和if语句的else相似
switch语句的注意事项:在switch语句中,如果case控制的语句体后面不写break,将出现穿透现象,在不判断下一个case值的情况下,向下运行,直到遇到break,或者整个switch语句结束。
关系运算符
注意事项:
① 关系运算符的结果都是boolean类型,要么是true,要么是false
② 千万不要把“==”写成了“=”
逻辑运算符
三元运算符
- 格式:关系表达式 ?表达式1 :表达式2;
- 范例:a > b ? a : b;
运算规则:
首先计算关系表达式的值
如果值为true,表达式1的值就是运算结果
如果值为false,表达式2的值就是运算结果
三元运算符和if语句格式2的区别
- 如果if语句控制的内容:是用变量纪录数据值,可以通过三元运算符改进
- 如果if语句控制的内容是:是通过输出语句直接输出数据值,无法通过三元运算符改进
使用三元运算符完成,求三个整数的最大值
/*
需求:
使用三元运算符完成, 求三个整数的最大值
三元运算符学习目的:
识别
*/
public class Demo06 {
public static void main(String[] args) {
//定义变量
int a = 10, b = 20, c = 30;
//先比较a和b, 获取较大值temp
int temp = a > b ? a : b;
//再比较temp和c, 获取最大值max
int max = temp > c ? temp : c;
//扩展: 一行求出max
//int max = (a > b ? a : b) > c ? (a > b ? a : b) : c;
//打印结果
System.out.println("max:" + max);
}
}
案例
你是青年人吗?
需求:给出你的年龄,通过程序判断你是否属于青年人? 提示:世界卫生组织,经过对全球人体素质和平均寿命进行测定,对年龄划分标准作出了新的规定:
分析:
① 如何判断一个年龄是否属于青年人?
年龄要大于等于18,并且小于等于65
② 在Java中如何表示并且的关系呢?
age >=18 && age<=65
&&:是逻辑运算符,用来连接两个结果为boolean类型的表达式,都为true,结果为true,否则为false
实现步骤:
① 定义一个int类型的变量来表示你的年龄
② 用if语句格式2进行判断看你是否属于青年人
③ 根据是否是青年人给出不同的提示信息
/*
需求: 根据键盘录入的age, 判断这个人在哪一个范围
[0-17] 未成年人
[18-65] 青年人
[66-79] 中年人
[80-99] 老年人
100+ 长寿老人
键盘对象 Scanner
1. 导包 import java.util.Scanner; //idea自动导包的,不需要写
2. 创建对象 Scanner sc = new Scanner(System.in);
3. 调用方法,接收数据 int num = sc.nextInt();
*/
import java.util.Scanner;
public class Demo05 {
public static void main(String[] args) {
//创建键盘对象
Scanner sc = new Scanner(System.in);
//控制提提示输入年龄
System.out.println("请输入一个年龄:");
int age = sc.nextInt();
//由于有多个条件,选择if的格式3
if (age <= 17 && age >= 0) {
System.out.println("未成年人");
} else if (age <= 65 && age >= 18) {
System.out.println("青年人");
} else if (age <= 79 && age >= 66) {
System.out.println("中年人");
} else if (age <= 99 && age >= 80) {
System.out.println("老年人");
} else if (age >= 100) {
System.out.println("长寿老人");
} else {
System.out.println("你输入的年龄错误!");
}
}
}
循环结构
循环结构
- for循环语句
- while循环语句
- do…while循环语句
for循环语句格式
格式说明:
- 初始化语句:这里可以是一条或者多条语句,这些语句用来完成初始化操作(int i=1)
- 条件判断语句:这里使用一个结果值为boolean类型的表达式,这个表达式能决定是否执行循环体语句(i<=5)
- 循环体语句:这里可以是任意语句,这些语句可能被多次执行
- 条件控制语句:这里通常是使用一条语句来改变变量的值,从而达到控制循环是否继续向下执行的效果(i=i+1)
执行流程:
①执行初始化语句
②执行条件判断语句,看其结果是true还是false
如果是false,循环结束
如果是true,继续执行
③执行循环体语句
④执行条件控制语句
⑤回到②继续执行
while循环语句格式
执行流程:
①执行初始化语句
②执行条件判断语句,看其结果是true还是false
如果是false,循环结束
如果是true,继续执行
③执行循环体语句
④执行条件控制语句
⑤回到②继续执行
do…while循环语句格式
执行流程:
①执行初始化语句
② 执行循环体语句
③ 执行条件控制语句
④执行条件判断语句,看其结果是true还是false
如果是false,循环结束
如果是true,继续执行
⑤回到②继续执行
三种循环语句的区别
三种循环语句的区别
- for循环和while循环先判断条件是否成立,然后决定是否执行循环体(先判断后执行)
- do...while循环先执行一次循环体,然后判断条件是否成立,是否继续执行循环体(先执行后判断)
for和while的区别
- 条件控制语句所控制的自增变量,因为归属for循环的语法结构中,在for循环结束后,就不可以继续使用了
- 条件控制语句所控制的自增变量,对于while循环来说不归属其语法结构中,在while循环结束后,还可以继续使用
死循环格式
- for(;;){}
- while(true) {}
- do{}while(true);
跳转控制语句
跳转控制语句概述
Debug概述
Debug:是供程序员使用的程序调试工具,它可以用于查看程序的执行流程,也可以用于追踪程序执行过程来调试程序。
Debug操作流程
Debug,又被称为断点调试,断点其实是一个标记,告诉我们从哪里开始查看。
①如何加断点:选择要设置断点的代码行,在行号的区域后面单击鼠标左键即可
②如何运行加了断点的程序:在代码区域右键Debug执行
③看哪里:看Debugger窗口,看Console窗口
④点哪里:点(Step Over F8) 开始,点(Stop)结束
⑤如何删除断点:选择要删除的断点,单击鼠标左键即可