JavaSE系列教程(二)_笑就对了的博客-程序员宅基地

技术标签: java  JavaSE全教程  

一、变量

(一)、字符类型

1、字符类型
char 所占字节 28 取值范围 0 - 65535
2、字符类型变量的赋值方式
(1) 通过 ‘’ 形式赋值
(2) 通过ASCII码表赋值
(3) 通过unicode编码赋值
3、ASCII码
在这里插入图片描述
4、字符集:又叫做码表,是人类语言符号和机器码值一一对应的表格。ASCII码是美国标准信息交换代码,兼容了英文字母和数字以及其他符号。其中字符0对应48,字符A对应的是65,字符a对应的是97,并且字母和数字分别连续。
5、世界各国使用计算机,都需要有兼容其语言的字符集支持。例如,中国兼容汉字的字符集是:GB2312,GBK。兼容世界各国的字符集是utf-8,也叫作万国码。
6、Java语言默认的字符集是Unicode码,Unicode码值的格式为:’\uxxxx’,其中xxxx是四个十六进制的数字。Unicode码能够表示65536个字符,从0开始表示。所以Java的取值范围0~65535没有负数。
7、任何字符集头128位都兼容ASCII码
8、一个英文字母,在任何字符集中都只占用1个字节。GBK中一个汉字占2个字节。utf-8中一个汉字占3个字节。

(二)引用数据类型

1、String类型
String 类是表示字符串的数据类型。在定义String类型的变量的时候,使用 “” 括起来
表示字符串常量内容
2、任意类型和String进行【+】操作的时候,结果都是一个String

1 class Demo02_String {
    
2 public static void main(String[] args) {
    
3 /*
4 String类型是Java官方提供的,用于表示字符串的类型
5 字符串:字符序列,使用""包围起来的一串字符
6 举例:"abc" "123" ""(空串) null
7
8 */
9 String str = "abc";
10
11 str = "123";
12
13 System.out.println(str);
14
15 System.out.println(123 + 1);
16
17 //字符串的拼接,任何类型的数据与字符串进行【+】运算的时候,得到的结果都是一个
新的字符串
18 //"123" + 1 ‐> "1231"
19 System.out.println(str + 1);
20
21 //23 ‐> "23"
22 //23 + "" ‐> "23"
23 System.out.println(23 + "" + 1);
24 }
25 }
26

二、运算符

(一)运算符概述

1、运算符概念:对常量或者变量进行操作的符号,通常用于数据的比较或运算
2、分类:
(1)算术运算符
(2)赋值运算符
(3)比较运算符
(4)逻辑运算符
(5)位移运算符
(6)三元运算符

(二)算数运算符

1、算术运算符概念:对常量或变量进行算术运算的符号
2、符号:
在这里插入图片描述
3、+ :加法运算符:
(1)数值加法运算
(2)字符加法运算:
(3)字符串加法运算
4、/:除法运算符:
(1)如果是两个整数相除,结果还是一个整数
(2)如果任意一个操作数是小数,那么结果就是小数,原因:隐式类型提升
5、%:取模运算符、取余运算符:获取两数相除的余数
(1)注意事项:取余的结果的符号只和%前面的操作数的符号有关
(2)作用:获取余数;判断是否整除;判断奇偶
6、++、–运算:
(1)++: 自增运算符,表示每次让变量值+1;–: 自减运算符,表示每次让变量值-1
(2)运算规律:++在前,返回加后的值;++在后,返回加前的值
(3)注意:自增自减运算符, 只能使用在变量之上

(三)赋值运算符

1、用于给变量进行赋值的运算符。
2、在这里插入图片描述
3、分类:
基本的赋值运算符:=
扩展的赋值运算符:+= -= *= /= %=
3、基本的赋值运算符:
将赋值运算符右边的数量,赋值给左边的变量
4、扩展的赋值运算符:
将符号左右两边的数量进行算数运算,将结果赋值给符号左边的变量
5、扩展赋值运算符与拆解步骤的区别:扩展赋值运算符存在自动强制类型转换

(四)比较运算符

1、用于比较是否相等和大小关系的符号,计算结果为boolean
2、
在这里插入图片描述

(五)逻辑运算符

1、用于连接逻辑数据的运算符,只能运算boolean类型的数据,运算结果为boolean
2、
在这里插入图片描述
3、运算规则:
(1)逻辑与:全真为真,一假即假
true & true true
true & false false
false & true false
false & false false
(2)逻辑或:一真为真,全假为假
true | true true
true | false true
false | true true
false | false false
(3)逻辑异或:不同为真,相同为假
true ^ true false
true ^ false true
false ^ true true
false ^ false false
(4)逻辑非:遇真则假,遇假则真
!true false
!false true
(5)短路与:全真为真,一假即假
true && true true
true && false false
false && true false
false && false false
(6)短路或:一真为真,全假为假
true || true true
true || false true
false || true true
false || false false
4、&、|和&&、||的区别:
逻辑与和逻辑或在计算完第一个表达式结果的时候,就算第一个表达式的结果能决定最终的结果,还是要去计算第二个表达式;短路与和短路或,只要第一个表达式的结果能决定最终结果,就不会去计算第二个表达式。少计算一个表达式,短路运算符要比逻辑运算符效率高

三、计算机存储单元

1、概述:计算机底层是采用二进制的方式存储数据的,计算机中存储的最小信息单位叫比
特位(bit),通常用 b 表示,8个比特位构成计算机中最基本的存储单位叫字节(Byte),通
常用 B 表示
2、存储单位之间的换算关系:
8bit = 1B
1024B = 1KB
1024KB = 1MB
1024MB = 1GB
1024GB = 1TB
1024TB = 1PB

四、进制

(一)进制概述

1.进制概念: 计数和进位的制度,几进制就是逢几进一
2.计算机常见进制:
在这里插入图片描述

(二)十进制转其他进制

1、除基倒取余:
(1)基:基数,要转成几进制,基数就是几
(2)除基倒序余:用十进制连续除以目标进制,每一步都取余数,知道商0为止。之后将每一步的余数按照倒序排列,就是转化得到的目标进制数字
在这里插入图片描述

(三) 其他进制转十进制

1、位权展开法:基数乘以系数的权次幂求和;
(1)基数: 指定进制数据中的每一位数
(2)系数: 进制数
(3)权次幂: 基数后数据位数
在这里插入图片描述

(四)二进制与其他进制转换

1、二进制转其他进制在这里插入图片描述
(五)原码、反码和补码
1.计算机中的数据: 分为无符号数据和有符号数据,Java语言都是有符号位的,十进制数和
小数在计算机中都是以二进制形式进行存储,且存储的有符号整数都是存储它们的补码.
2.Java有符号数据表示规则:
(1)符号: 0正1负,放在数值的最高位
(2)有符号数可以表示为:原码,反码,补码。原码即为数值的二进制表示,但因为CPU内部加法和减法CPU最终做的都是加法,同时为了准确表示正负数和优化运算,就有了对应的反码和补码。乘法和除法就会涉及位移运算
3、原码:数据转为二进制之后,没有数字的地方补0,如果是正数,最高位就补0表示正数;如果是负数,最高位补1,表示负数
4、正数的原码反码补码一模样
5、负数的反码,是原码除了符号位按位取反,1变0,0变1
6、负数的补码是反码+1
(六)各种整数类型最值推导
1.Java中的整数类型都各自占有不同的内存大小,也有其对应的数值范围
2、整数数值范围推导过程
byte:8bit,8个二进制位,其中最高位表示符号位(0正1负),因为在计算机中,是采用补码来表示数据
byte取值范围-128至127,推导过程:
(1)正数最大: 0111 1111,补码和原码一致,对应最值为: 2^7-1 = 127
(2)负数的范围: 1000 0001至1111 1111,这些数据在计算机中都是以补码的形式存在
的,转换成原码后,其 取值范围为-1到-127
(3)1000 0000 补码表示的-0,转换成原码后,11000 0000,因而其表示的是-128
(4)注意: 简单的理解方法就是,byte是8字节,一共可以表示256个数, 正数1到127,因
此负数-1到-128,还有一个0
五、位运算的详解
(一)位运算符概述
1、位运算概念: 位运算符主要按位对每个二进制位(bit)进行运算,其操作数和运算结果都
是整数。即只能对:byte、short、char、int、long进行运算
2、Java语言中位运算分为:位逻辑运算符和位移运算符两类
3、位运算符:在这里插入图片描述
(二)位逻辑运算
1、按位与&:补码按位逐位相与,全1则1,否则为0
(1)参与运算的数字,低位对齐,高位不足的补0
(2)对应的二进制位同时为1, 计算结果为1,否则为0
(3)任何数与0进行按位运算,其结果都为0
2、按位或|: 补码按位逐位相或,全0则0,否则为1
(1)参与运算的数字,低位对齐,高位不足的补0
(2)对应的二进制位只要有一个为1, 结果为1
(3)对应的二进制位都为0, 结果为0
3、按位异或^:补码按位逐位异或,不同为1,否则为0
(1)参与运算的数字,低位对齐,高位不足的补0
(2)对应的二进制位相同(同时为0或同时为1)时,结果为0
(3)对应的二进制位不相同,结果为1
(4)运算规律:ABB得到A
4、按位取反~: 对一个操作数进行运算,补码按位逐位取反,1变0,0变1
(1)注意: ~是个单目运算符,只有一个操作数
(二)位逻辑运算
1、按位与&:补码按位逐位相与,全1则1,否则为0
(1)参与运算的数字,低位对齐,高位不足的补0
(2)对应的二进制位同时为1, 计算结果为1,否则为0
(3)任何数与0进行按位运算,其结果都为0
2、按位或|: 补码按位逐位相或,全0则0,否则为1
(1)参与运算的数字,低位对齐,高位不足的补0
(2)对应的二进制位只要有一个为1, 结果为1
(3)对应的二进制位都为0, 结果为0
3、按位异或^:补码按位逐位异或,不同为1,否则为0
(1)参与运算的数字,低位对齐,高位不足的补0
(2)对应的二进制位相同(同时为0或同时为1)时,结果为0
(3)对应的二进制位不相同,结果为1
(4)运算规律:ABB得到A
4、按位取反~: 对一个操作数进行运算,补码按位逐位取反,1变0,0变1
(1)注意: ~是个单目运算符,只有一个操作数
七、键盘录入
(一)键盘录入的使用
1.键盘录入: Scanner类,来自于java.util包,是JDK提供的类型.
2.作用: 在程序运行的过程中,可以使用Scanner类来实现获取从键盘输入的数据,提高数
据来源灵活度.
3.Scanner类使用步骤:
(1)导包
目的: 为了让JVM定位到Scanner类型所在的具体位置
导入方式: 类的声明之上使用关键字import,表示导入:
1 import java.util.Scanner;
(2)创建键盘录入对象
1 Scanner sc = new Scanner(System.in);
(3)调用sc对象的nextInt方法,获取键盘录入的整数:
1 int x = sc.nextInt();
(4)使用x后续处理
代码示例
1 //1.导包(引入键盘录入的资源)
2 import java.util.Scanner;
3
4 class Demo12_Scanner {
5 public static void main(String[] args) {
6 /*
7 在实际应用中,代码中的数据,我们希望直接通过键盘输入到计算机中,
8 而不是在代码中反复修改,所以使用键盘录入,实现数据的录入
9
10 前言:因为没有学习面向对象和IO流等,此处学习纯靠记忆
11
12 /
13
14 //2.创建扫描器对象
15 Scanner sc = new Scanner(System.in);
16
17 //3.调用nextInt()方法(这个方法只能支持:输入整数,并且扫描整数),扫描键盘输入
的内容
18 int num = sc.nextInt();
19
20 //4.根据需求操作数据
21 System.out.println(“您录入的数据是:” + num);
22 }
23 }
24
(二)键盘录入练习
案例1: 键盘录入两整数求和
代码示例
1 //1.导包
2 import java.util.Scanner;
3
4 /

5 案例1: 键盘录入两整数求和
6 /
7 class Demo13_Exercise1 {
8 public static void main(String[] args) {
9 //2.创建扫描器对象
10 Scanner sc = new Scanner(System.in);
11
12 //3.调用方法录入数据
13 int num1 = sc.nextInt();
14 int num2 = sc.nextInt();
15
16 System.out.println(num1 + num2);
17 }
18 }
19
案例2: 键盘录入三整数求最大值
代码示例
1 //1.导包
2 import java.util.Scanner;
3
4 /

5 2、键盘录入三整数求最大值
6 /
7 class Demo14_Exercise2 {
8 public static void main(String[] args) {
9 //2.创建扫描器对象
10 Scanner sc = new Scanner(System.in);
11
12 //3.调用方法录入数据
13 int num1 = sc.nextInt();
14 int num2 = sc.nextInt();
15 int num3 = sc.nextInt();
16
17 //4.比较任意两个数获取较大值
18 int better = num1 > num2 ? num1 : num2;
19
20 //5.较大数字和第三个数字比较,获取最大值
21 int max = better > num3 ? better : num3;
22
23 System.out.println(“最大值:” + max);
24 }
25 }
26
案例3: 键盘录入一整数,判断奇偶
代码示例
1 import java.util.Scanner;
2
3 /

4 案例3: 键盘录入一整数,判断奇偶
5 /
6 class Demo15_Exercise3 {
7 public static void main(String[] args) {
8 Scanner sc = new Scanner(System.in);
9 int num = sc.nextInt();
11
12 System.out.println(num + “是一个” + (num % 2 == 0 ? “偶数” : “奇数”));
13 }
14 }
15
八、流程控制
(一)流程控制概述
1.流程控制概念: 控制代码的执行顺序就是流程控制.
2.流程控制的分类:
(1)顺序结构: 代码从上到下,从左到右依次执行.
(2)分支结构: 根据条件选择执行路径
① 代码特点: 写得多,执行的少
② 语句实现: if条件语句三种格式,switch开关选择语句
(3)循环结构: 相同相似的代码逻辑在符合条件的情况下,可以多次反复的执行
① 代码特点: 写得少,执行的多
② 语句实现: for循环语句,while循环语句,do while循环语句,continue继续语
句,break终止语句,return返回语句
(二)分支结构之if条件语句
(1)if语句的第一种格式
1、格式:
1 if(布尔表达式) {
2 语句体;
3 }
2、说明:
(1)if,关键字,表示如果的含义
(2)if语句后面跟着的小括号,里面必须是boolean类型的值;计算结果为true或者
false
(3)语句体,可以是任意操作
3、执行流程:
(1)计算布尔表达式的值,要么为true,要么为false
(2)如果计算结果为true,执行语句体
(3)如果计算结果为false,就不执行语句体
代码示例
需求: 某公司现在要给员工进行薪资调整, 工作年龄大于等于5年, 加薪3000元, 工龄不够5
年的, 没有加薪
1 class Demo16_If {
2 public static void main(String[] args) {
3 /

4 定义格式:
5
6 if(逻辑表达式) {
7 满足逻辑表达式条件要执行的语句体
8 }
9
10 说明:
11 1、if:关键字,含义:假如
12
13 执行流程:
14 1、执行逻辑表达式
15 2、如果为true,执行语句体,执行完毕后整个if结束,if后面的代码照常执行
16 3、如果为false,整个if直接结束,if后面的代码照常执行
17
18 */
19
20 //判断一个数字如果为偶数就打印这个数字
21 /*int num = 45;
22
23 if(num % 2 == 0) {
24 System.out.println(num);
25 }
26
27 System.out.println("~~~~~~~~~~~~~");
28 /
29
30 //需求: 某公司现在要给员工进行薪资调整, 工作年龄大于等于5年, 加薪3000元, 工龄
不够5年的, 没有加薪
31 int workAge = 15;
32
33 int basicSalary = 10000;
34
35 if(workAge >= 5) {
36 basicSalary += 3000;
37 }
38
39 System.out.println(“现在工资为:” + basicSalary);
40
41 }
42 }
43
(2)if语句的注意事项
1、小括号后面不要加分号,一般来说,有左大括号,就没有分号,有分号,就没有左大括号
2、如果if语句体只有一句代码,大括号可以省略,但是建议所有情况都加上大括号,不要省略
代码示例
1 class Demo18_Warning {
2 public static void main(String[] args) {
3
4 /

5 int num = 13;
6
7 if(num > 5); {
8 System.out.println(“遍插茱萸少一人”);
9 }
10
11 System.out.println("!!!!!!!!!!!!!!");
12 /
13
14 /

15 当且仅当if语句体只有一句的时候,可以省略大括号
16 /
17 int num = 3;
18
19 if(num > 5) {
20 System.out.println(“遍插茱萸少一人”);
21 System.out.println(“磨刀霍霍向爹娘”);
22 }
23
24 System.out.println("!!!!!!!!!!!!!!");
25 }
26 }
27
(3)if语句的第二种格式
1、格式:
1 if (条件表达式) {
2 语句体1;
3 } else {
4 语句体2;
5 }
2、执行流程:
(1)计算条件表达式的值,要么为true,要么为false
(2)如果条件表达式的值为true,执行语句体1
(3)如果条件表达式的值为false,执行语句体2
3、注意事项:if中的语句体1和else中的语句体2,一定会执行其中一个,不可能全执行或者
全不执行
代码示例
需求1: 某公司现在要给员工进行薪资调整, 工作年龄大于等于5年, 加薪3000元, 工龄不够
5年, 加薪1000元
1 class Demo17_IfElse {
2 public static void main(String[] args) {
3 /

4 定义格式:
5 if(逻辑表达式) {
6 语句体1;
7
8 } else {
9 语句体2;
10 }
11
12 说明:
1、else,关键字,含义:否则
14
15 执行流程
16 1、执行逻辑表达式
17 2、如果为true,执行语句体1,执行完毕后整个if‐else结束,后面的代码照常执行
18 3、如果为false,执行语句体2,执行完毕后整个if‐else结束,后面的代码照常执行
19
20 /
21
22 /

23 需求1: 某公司现在要给员工进行薪资调整, 工作年龄大于等于5年,
24 加薪3000元, 工龄不够5年, 加薪1000元
25
26 /
27 int workAge = 3;
28
29 int basicSalary = 8000;
30
31 if(workAge >= 5) {
32 basicSalary += 3000;
33 } else {
34 basicSalary += 1000;
35 }
36
37 System.out.println(“调薪后薪水为:” + basicSalary);
38 }
39 }
40
(4)if语句的第三种格式
1、格式
1 if (条件表达式1) {
2 语句体1;
3 } else if (条件表达式2) {
4 语句体2;
5 } else if (条件表达式3) {
6 语句体3;
7 }
8 …
9 } else if (条件表达式n) {
10 语句体n;
11 } else {
12 语句体n+1;
13 }
2、执行流程:
(1)计算条件表达式1,如果为true,就执行语句体1
(2)如果条件表达式1为false,计算条件表达式2,如果为true,就执行语句体2
(3)如果条件表达式2为false,就计算条件表达式3…
(4)如果条件表达式1~条件表达式n全都为false,那么就执行语句体n+1
3、注意事项:最后的else语句可以有也可以没有。如果有,语句体1到语句体n+1一定会执
行其中一句。如果没有,就可能没有语句执行
代码示例
需求:某公司现在要给员工进行薪资调整,根据工龄决定涨薪级别
[0-5): 涨薪2000元
[5-10): 涨薪3000元
[10-15): 涨薪4000元
[15,以上): 涨薪5000元
1 import java.util.Scanner;
2
3 class Demo19_IfManyElse {
4 public static void main(String[] args) {
5 /

6 定义格式:
7 if(逻辑表达式1) {
8 语句体1;
9 } else if(逻辑表达式2) {
10 语句体2;
11 } else if(逻辑表达式3) {
12 语句体3;
13 }
14 …
15
16 } else {
17 语句体n;
18 }
19
20 执行流程:
21 1、执行逻辑表达式1
22 2、如果为true,则执行语句体1,执行完毕后结束整个if语句体
23 3、如果为false,则执行逻辑表达式2,如果为true,执行语句体2
24 4、如果为false,则继续执行下一个逻辑表达式
25 5、如果所有逻辑表达式都是false,则执行语句体n
26 /
27
28 /

29 需求:某公司现在要给员工进行薪资调整,根据工龄决定涨薪级别
30 [0‐5): 涨薪2000元
31 [5‐10): 涨薪3000元
32 [10‐15): 涨薪4000元
33 [15,以上): 涨薪5000元
34 /
35 Scanner sc = new Scanner(System.in);
36
37 System.out.println(“请录入工龄:”);
38 int workAge = sc.nextInt();
39
40 System.out.println(“请录入底薪:”);
41 int basicSalary = sc.nextInt();
42
43 /

44 [0‐5): 涨薪2000元
45 [5‐10): 涨薪3000元
46 [10‐15): 涨薪4000元
47 [15,以上): 涨薪5000
48 /
49 /

50 if(workAge >= 0 && workAge < 5) {
51 basicSalary += 2000;
52 } else if(workAge >= 5 && workAge < 10) {
53 basicSalary += 3000;
54 } else if(workAge >= 10 && workAge < 15) {
55 basicSalary += 4000;
56 } else if(workAge >= 15) {
57 basicSalary += 5000;
58 } else {
59 System.out.println(“工龄录入有误”);
60 }
61 /
62
63 if(workAge >= 0 && workAge < 5) {
64 basicSalary += 2000;
65 } else if(workAge < 10) {
66 basicSalary += 3000;
67 } else if(workAge < 15) {
68 basicSalary += 4000;
69 } else if(workAge >= 15) {
70 basicSalary += 5000;
71 } else {
72 System.out.println(“工龄录入有误”);
73 }
74 System.out.println(“当前工资为:” + basicSalary);
75 }
76 }
77
(5)if语句重要问题
代码示例
1 class Demo20_Question {
2 public static void main(String[] args) {
3 int i = 10;
4 //int j = 0;
5 int j;
6
7 /

8 局部变量:定义在方法中的变量就是局部变量
9 局部变量:必须先赋值后使用
10
11 Java代码分为编译期和运行期
12
13 编译期只检查语法,不检查逻辑
14 逻辑实在运行的时候具体判断的
15
16 此题目:编译的时候,仅仅认为是三个符合语法规则的条件,
17 但条件是什么逻辑并不会去检查,所以就倒置可能会有条件万一全都不能达成,
18 j就无法被赋值的情况,就会违背局部变量先赋值后使用的原则,
19 所以编译不同过,不让.class文件生成
20
21 /
22 /

23 原题
24
25 if(i >= 0 && i < 100) {
26 j = 1;
27
28 } else if(i < 1000) {
29 j = 11;
30
31 } else if(i < 10000) {
32 j = 111;
33
34 }
35
36 System.out.println(j);
37 /
38 /

39
40 此种解决方案,代码冗余过多
41 if(i >= 0 && i < 100) {
42 j = 1;
43 System.out.println(j);
44 } else if(i < 1000) {
45 j = 11;
46 System.out.println(j);
47 } else if(i < 10000) {
48 j = 111;
49 System.out.println(j);
50 }
51
52 System.out.println(j);
53 /
54
55 /

56 if(i >= 0 && i < 100) {
57 j = 1;
58 } else if(i < 1000) {
59 j = 11;
60 } else if(i < 10000) {
61 j = 111;
62 }
63
64 System.out.println(j);
65 /
66
67 /

68 if(i >= 0 && i < 100) {
69 j = 1;
70 } else if(i < 1000) {
71 j = 11;
72 } else if(i < 10000) {
73 j = 111;
74 } else {
75 j = 0;
76 }
77
78 System.out.println(j);
79 /
80
81 if(i <= 0) {
82 j = 1;
83 } else if(i > 0 && i <= 1000) {
84 j = 11;
85 } else {
86 j = 111;
87 }
88
89 System.out.println(j);
90 }
91 }
92
(6)if语句练习
判断输入的数字是否是水仙花数,水仙花数是指一个3位数,它的每个位上的数字的3次幂之和
等于它本身。例如: 1^3 + 5^3+ 3^3 = 153
1 import java.util.Scanner;
2
3 /

4 判断输入的数字是否是水仙花数,水仙花数是指一个3位数,
5 它的每个位上的数字的3次幂之和等于它本身。例如: 1^3 + 5^3+ 3^3 = 153
6 /
7 class Demo21_IfExercise {
8
9 public static void main(String[] args) {
10 Scanner sc = new Scanner(System.in);
11
12 System.out.println(“请录入一个三位数:”);
13 int num = sc.nextInt();
14
15 if(num >= 100 && num < 1000) {
16 //1.获取这个数字的每个位上的数字 153
17 int unit = num % 10;
18 int ten = num / 10 % 10;
19 int hundred = num / 100;
20
21 //2.计算各个位的三次方和
22 int sum = unit * unit * unit
23 + ten * ten * ten
24 + hundred * hundred * hundred;
25
26 //3.如果当前的和等于数字本身,这个数字就是一个水仙花数
27 /

28 if(num == sum) {
29 System.out.println(num + “是一个水仙花数”);
30 } else {
31 System.out.println(num + “是一个水仙花数”);
32 }
33 /
34 String str = num == sum ? “是” : “不是”;
35
36 System.out.println(num + str + “一个水仙花数”);
37
38 } else {
39 System.out.println(“录入有误,不是三位数”);
40 }
41 }
42 }
43
(三)分支结构之switch语句
(1)switch语法
1、switch: 表示英文中的开关,每个条件都像一扇门,开着的,就进门执行,否则就到下一扇
门判断
2、格式:
1 switch (表达式) {
2 case 常量1:
3 语句体1;
4 break;
5 case 常量2:
6 语句体2;
7 break;
8 …
9 case 常量n:
10 语句体n;
11 break;
12 default:
13 语句体n+1;
14 }
3、关键字解释:
switch: 开关
case: 情况
break: 破坏,退出
default: 默认
4、执行流程:
(1)计算switch小括号中表达式的值,分别和case后的各个常量值匹配
(2)如果和常量1匹配,那么就执行语句体1,执行break,switch语句结束
(3)如果和常量1不匹配,那么就判断是否和常量2匹配,如果匹配就执行语句体2,执行
break,switch语句结束
(4)以此类推,如果常量1到常量n全都没有和表达式的值匹配,那么就执行default中的
内容,switch语句结束
代码示例
需求1:键盘录入一个整数,用于进行星期匹配,数据范围1-7,对应匹配星期一到星期天,
如果不是1-7范围,那么报出数据错误提示信息
1 import java.util.Scanner;
2
3 class Demo22_Switch {
4 public static void main(String[] args) {
5 /

6 定义格式:
7 switch(表达式) {
8 case 常量1:
9 语句体1;
10 break;
11 case 常量2:
12 语句体2;
13 break;
14 case 常量3:
15 语句体3;
16 break;
17 …
18 case 常量n:
19 语句体n;
20 break;
21 default:
22 语句体n+1;
23 }
24
25 说明:
26 1、switch语句也是一个分支结构
27 2、switch,关键字:开关
28 3、case,关键字:情况
29 4、break,关键字,破坏
30 5、default,关键字:默认的
31
32 执行流程:
33 1、执行表达式,会得到一个结果
34 2、将表达式的结果,按照从上到下的顺序,挨个匹配每一个case之后的常量
35 3、哪个常量和结果一样,就会执行case内部的语句体
36 4、语句体执行完毕之后,执行break;语句,结束整个switch
37 5、如果所有的case常量都没有匹配到,会执行default内的语句体,执行完毕后执行右
大括号,结束整个switch
38
39 /
40 Scanner sc = new Scanner(System.in);
41
42 System.out.println(“请录入一个数字:”);
43 int num = sc.nextInt();//8
44
45 String result;
46
47 switch(num) {
48 case 1:
49 result = “星期一”;
50 break;
51 case 2:
52 result = “星期二”;
53 break;
54 case 3:
55 result = “星期三”;
56 break;
57 case 4:
58 result = “星期四”;
59 break;
60 case 5:
61 result = “星期五”;
62 break;
63 case 6:
64 result = “星期六”;
65 break;
66 case 7:
67 result = “星期日”;
68 break;
69 default:
70 result = “没有对应日期”;
71 }
72
73 System.out.println(result);
74 }
75 }
76
(2)switch语句的注意事项
1、switch小括号表达式:
Jdk1.5之前: byte,short,char,int
Jdk1.5: 枚举类型
Jdk7: String
2、case后面只能跟常量,不能跟变量
3、每个case语句体后面,一定要跟上一个break语句,否则就无法结束switch语句,并且发
生case穿透。
4、case穿透的利用: 多个case情况如果是相同的执行逻辑,可以在最后一个case语句后再
使用break,在switch语句中,如果case的后面不写break,也就不会再判断下一个case的
值,直接向后寻找一切可执行语句运行,直到遇到break,或者整体switch结束
5、default语句: 可以写也可以不写。如果不写,就有可能一个语句都执行不到,建议把
default语句加上
6、default语句可以写在任意位置,无论写在什么位置,都是最后去匹配,建议把default语句
写在最后
7、switch语句结束的条件: 遇到break语句,遇到switch语句右大括号
代码示例
需求:键盘录入一个整数,用于进行工作日与休息日匹配,数据范围1-5,输出工作日; 数据范
围6-7输出休息日; 其余数据报出”数据有误”提示信息
1 class Demo23_SwitchWarning {
2 public static void main(String[] args) {
3 /

4 1、switch大括号中的内容,可以什么都不写(不写没有意义),旨在灵活搭配
5 2、表达式可以书写的内容:byte、short、int、char、String、枚举
6 3、case之后只能写常量,不能写变量
7 4、case之后的常量要和表达式的数据类型相关
8 5、break;语句用于结束整个switch,但是可以省略。省略之后会发生case穿透现象。
9 当我们从一个case匹配进去,如果没有break,执行完这个case的语句体后,会立即执行
下一个case的
10 语句体,直到遇到第一个break;语句或者switch的右大括号才能结束
11 6、当所有情况都不满足,就会执行default的语句体。default不论写在什么位置,都是
最后才去执行的。
12 一般情况下,都是写在最后,符合阅读习惯。default写在最后,可以省一个break;如果
写在其他的地方,
13 记得加上break;,否则会出现case穿透
14 7、switch语句的结束标志:break;语句或者右大括号
15
16 /
17 /

18 byte b = 1;
19 short s = 2;
20 int num = 10;
21 //long l = 2147483648L;
22
23 char ch = ‘a’;
24 String str = “abc”;
25
26 double dou = 3.5;
27
28 switch(dou) {
29
30 }
31 /
32
33 int num = 2;
34
35 String result;
36
37 //int a = 1;
38
39 switch(num) {
40 default:
41 result = “没有对应日期”;
42 case 1:
43 result = “星期一”;
44 //System.out.println(result);
45 break;
46 case 2:
47 result = “星期二”;
48 //System.out.println(result);
49 break;
50 case 3:
51 result = “星期三”;
52 //System.out.println(result);
53 break;
54 case 4:
55 result = “星期四”;
56 //System.out.println(result);
57 break;
58 case 5:
59 result = “星期五”;
60 //System.out.println(result);
61 break;
62 case 6:
63 result = “星期六”;
64 break;
65 case 7:
66 result = “星期日”;
67 break;
68
69 }
70
71 System.out.println(result);
72 }
73 }
74
(3)switch练习
键盘录入一个月份,输出这个月份对应的季节。345月是春季,678是夏季,9、10、11秋
季,12、1、2冬季,其他数字,没有任何季节,提示录入错误
代码示例
1 import java.util.Scanner;
2
3 /

4 键盘录入一个月份,输出这个月份对应的季节。
5 345月是春季,678是夏季,9、10、11秋季,12、1、2冬季,其他数字,没有任何季节,提示录
入错误
6 */
7 class Demo24_SwitchExercise {
8 public static void main(String[] args) {
9 Scanner sc = new Scanner(System.in);
10
11 System.out.println(“请录入月份:”);
12 int month = sc.nextInt();
13
14 String result;
15
16 switch(month) {
17 case 3:
18 case 4:
19 case 5:
20 result = “春季”;
21 break;
22 case 6:
23 case 7:
24 case 8:
25 result = “夏季”;
26 break;
27 case 9:
28 case 10:
29 case 11:
30 result = “秋季”;
31 break;
32 case 12:
33 case 1:
34 case 2:
35 result = “冬季”;
36 break;
37 default:
38 result = “输入有误”;
39 }
40
41 System.out.println(result);
42 }
43 }
4

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_53077591/article/details/119189054

智能推荐

阿里云视频云推出低代码音视频工厂vPaaS_代码派的博客-程序员宅基地_vpaas平台

大势所趋众所体感,社会已演进到超视频化时代,视频云技术从内容和交互视角,推动了用户端全方位的体验革新,更驱动了众多行业的音视频数智化转型。音视频技术积累阿里云视频云凭借阿里巴巴卓越的技术能力和生态体系,以及自身沉淀了13年的行业经验,正在着力打造云端一体的数智化音视频能力,构建全场景的产品矩阵和全链路的音视频服务,助力多行业的数智化转型和多产业的数智化升级,实现全民共享、技术普惠,助力云上创新、价值创造。阿里云视频云正全力聚焦于数智传媒、智慧教育、平台电商化、互联网泛娱乐、办公协同等核心领域

OpenCV+Python简单实践之硬币检测以及条形码检测_醉意丶千层梦的博客-程序员宅基地

一、简单图片格式1.位图2.文件压缩比二、用奇异值分解(SVD)对一张图片进行特征值提取(降维)处理1.代码2.效果三、采用图像的开闭运算(腐蚀-膨胀),检测出2个样本图像中硬币、细胞的个数1.硬币检测代码读取图片转为灰度图片图片二值化腐蚀膨胀找到硬币中心标识硬币显示结果最终结果源码2.细胞检测四、 采用图像梯度、开闭、轮廓运算等,对图片中的条形码进行定位提取;再调用条码库获得条码字符读取图片转为灰度图片高斯滤波处理Sobel算子计算梯度差均值方波消除高频噪声

【229期推荐】积水潭医院HIS突然瘫痪,应急预案成问题_weixin_33857230的博客-程序员宅基地

本周热点:事件追溯17日下午,新浪网友@康建鹏发微博称,“积水潭医院HIS瘫掉了,门诊挂不了号,交不了费,医院叫不了号。”网友@康建鹏继续发布现场情况,“15分钟前启动手动流程,非医保开始手动收费,检查项目正常进行。”“一个小时过去了,未见任何纠纷,可见医院一方人员说明工作到位,也赞患者对故障的理解。周一下午是高峰期,如此有条不紊,管理水平...

SpringBoot + Vue前后端分离开发:全局异常处理及统一结果封装_小灵宝的博客-程序员宅基地_统一结果封装

SpringBoot + Vue前后端分离开发:全局异常处理及统一结果封装文章目录SpringBoot + Vue前后端分离开发:全局异常处理及统一结果封装前后端分离开发中的异常处理统一结果封装后端全局异常捕获及处理前端axios后置拦截器前后端分离开发中的异常处理  在我们的前后端分离项目中,有时候不可避免发生后端服务报错抛出异常的情况,如果不配置全局异常处理机制,就会默认返回tomcat或者nginx的5XX页面,对普通用户来说,不太友好,用户也不懂什么情况。这时候需要我们程序员设计返回一个友好简

使用ogg迁移mysql_借助OGG完成Oracle到MySQL的数据迁移_土豆焖马铃薯的博客-程序员宅基地

现在有个任务是需要把Oracle的数据迁移到MySQL,因为就涉及到了几个表,所以我最先想到了使用spool把Oracle的数据导成txt文件,然后再load 进去MySQL。非常遗憾的是,我的有一个表有110个字段,并且有160万的数据,始终就只能倒进一部分数据,最后由于时间问题,没有继续尝试,然后打算用golden gate完成任务。我们知道golden gate主要就在于几个进程的配置,安装...

php 热点 功能写法,javascript如何写热点图_javascript技巧_weixin_39768917的博客-程序员宅基地

在gis中,你如果用js来写热点图 不借助后台怎么搞,as的话比较容易有相应的类库甚至官方都有。而且用js不借助arcgis发布rest服务,(注:热点图可以借助服务的形式发布,arcgis for javascript有相应的api支持的),这个时候就比较麻烦了,首先说明下热点图是啥?热点图是以点的形式展示,通过补全周边变化颜色也会相应的调整渐变,类似于足球某个人的运动范围那种,我找了下有个he...

随便推点

react学习笔记-react官方脚手架搭建项目与支持less_雪碧就是好喝的博客-程序员宅基地

react学习笔记-react官方脚手架搭建项目与支持less脚手架搭建项目支持less安装 less &amp; less-loader通过 webpack 使用 less-loader暴露 webpack 配置文件修改 webpack 配置脚手架搭建项目默认已经安装并配置了nodejs及其全局环境。打开任意一种可以使用控制台指令的工具,可以是git的bash,可以是vscode的终端,也...

delphi 使用ado 读写 vfp或者dbase4的数据库 _小二码农的博客-程序员宅基地

   tableDB.ConnectionString:=Provider=Microsoft.Jet.OLEDB.4.0;Data Source=+ ExtractFilePath(dir) +;Extended Properties=dBase 5.0;Persist Security Info=False;;       tableDB.ConnectionStrin

CentOS下安装MySQL8.0.27(tar包安装方式)_奔跑吧邓邓子的博客-程序员宅基地_mysql8.0 tar包安装

目录一、下载二、解压三、将解压文件移至 /usr/local 目录下四、创建用户组 mysql五、用户组下增加用户 mysql六、创建 my.cnf七、创建 data 文件夹八、修改 /usr/local/mysql8.0 所有者及属组九、初始化十、找到初始密码十一、修改密码并授权十二、开启防火墙,允许外网访问一、下载下载地址:https://dev.mysql.com/downloads/mysql/8.0.html二、解压tar xvf mysql-8.0.29-linux-glibc2.1

Ubuntu16.04配置单机版Zookeeper和Kafka_dlx29376的博客-程序员宅基地

1. 配置zookeeper单机模式选择的是zookeeper-3.4.10版本,官网下载链接:http://mirrors.hust.edu.cn/apache/zookeeper/stable/。下载之后将zookeeper-3.4.10.tar.gz解压到指定文件夹。tar xvzf dl/zookeeper-3.4.10.tar.gz -C app/解压之后,...

struct和typedef struct_AC_XXZ的博客-程序员宅基地

分三块来讲述:  1 首先://注意在C和C++里不同    在C中定义一个结构体类型要用typedef:    typedef struct Student    {    int a;    }Stu;    于是在声明变量的时候就可:Stu stu1;(如果没有typedef就必须用struct Student stu1;来声明)    这里的Stu实际上就是

介质中的Maxwell方程_东门之杨的博客-程序员宅基地

介质中的Maxwell方程⎧⎩⎨⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪∇⋅E=ρε0∇×E=−∂B∂t∇⋅B=0∇×B=μ0j+ε0μ0∂E∂t\begin{cases}\nabla\cdot\mathbf E=\dfrac{\rho}{\varepsilon_0}\\\nabla\times\mathbf E=-\dfrac{\partial \mathbf B}{\partial t}\\\na

推荐文章

热门文章

相关标签