JavaSE之流程控制结构
Posted 梧桐更兼细雨_到黄昏
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JavaSE之流程控制结构相关的知识,希望对你有一定的参考价值。
流程控制语句结构
一、顺序结构
public static void main(String[] args){
??? //顺序执行,根据编写的顺序,从上到下运行
??? System.out.println(1);
??? System.out.println(2);
??? System.out.println(3);
}
二、复合语句
Java语言的复合语句是以整个块区为单位的语句,所以又称为块语句。复合语句由开括号“{”开始,闭括号“}”结束。
复合语句中的每一语句都是从上到下执行。复合语句以整个块为单位,并且在复合语句中可以嵌套复合语句。
class 类{
???????????????? {???????
?????????????????????? //代码块
???????????????? }
??????????????? 方法签名{
???????????????????????? //方法体
???????????????? }
??????????????? 内部类{
?????????????????????? 内部类体
???????????????? }
???????? }
复合语句为变量创建了一个作用域。在该作用域中某个变量被创建并能够使用,如果在某个变量的作用域外使用该变量,则会发生错误。
三、分支结构
1、条件判断(if...else)
1.每个if或者else后面的{}不是必须的,但是如果没有{},默认只能带一条语句。即if或else后面的语句块只有一条语句时,可以省略{},但是可读性不够好。
2.最后的else不是必须的,可以缺省
3.当多个条件是互斥关系时,顺序无所谓
4.当多个条件是包含关系时,“小上大下/子上父下”
2、选择结构(switch...case)
- 语法格式
switch(表达式){
???????? case 常量值1:
?????????????????? 语句块1;
?????????????????? break;
???????? case 常量值2:
?????????????????? 语句块2;
?????????????????? break;
???????? case 常量值3:
?????????????????? 语句块3;
?????????????????? break;??????????????
???????? ....
???????? default:
?????????????????? 语句块n+1;
???????????????? ?break;??????
}
说明:
default的分支,可以在任意位置,只是习惯上我们写在最后,但是不管在哪里,都是先判断case的值,然后再去看default。
- 执行特点
要求:
(1)case后面必须是常量
(2)case后面的常量值不能重复
(3)case后面的常量值必须与switch(表达式)的类型一致或兼容
(4)switch(表达式)的类型只能是如下几种类型
???????? 四种基本数据类型:byte,short,int,char
???????? 两种引用数据类型:JDK1.5枚举,JDK1.7String
- 代码实现
/*
12 * default不是必须的,也可以不写
13 * 输出:case two
14 */
15 private static void defautTest() {
16 char ch = ‘A‘;
17 switch (ch) {
18 case ‘B‘:
19 System.out.println("case one");
20 break;
21 case ‘A‘:
22 System.out.println("case two");
23 break;
24 case ‘C‘:
25 System.out.println("case three");
26 break;
27 }
28 }
29
30 /*
31 * case语句中少写了break,编译不会报错
32 * 但是会一直执行之后所有case条件下的语句,并不再进行判断,直到default语句
33 * 下面的代码输出: case two
34 * case three
35 */
36 private static void breakTest() {
37 char ch = ‘A‘;
38 switch (ch) {
39 case ‘B‘:
40 System.out.println("case one");
41
42 case ‘A‘:
43 System.out.println("case two");
44
45 case ‘C‘:
46 System.out.println("case three");
47 default:
48 break;
49 }
50 }
51
52 /**
*switch用于判断String类型
54 * 输出:It‘s OK!
55 */
56 private static void stringTest() {
57 String string = new String("hello");
58 switch (string) {
59 case "hello":
60 System.out.println("It‘s OK!");
61 break;
62
63 default:
64 System.out.println("ERROR!");
65 break;
66 }
67 }
四、循环结构
1、for循环
- for循环第一种格式
for(初始化语句①; 循环条件语句②; 迭代语句④){
循环体语句③
}
注意:
(1)循环条件必须是boolean类型
(2)如果循环条件语句②省略的话,就默认为循环条件成立
- for循环第二种格式
for(int i:a)解释是:先设置一个与a数组里的元素相同的变量,这个变量先等于a数组的第一个元素,然后进入循环体,第二次循环就等于a数组的第二个元素,进入循环体,以此类推。
int[][] dirc = {{1,0},{0,1},{-1,0},{0,-1}};
int lengthI = dirc.length;
int lengthJ = dirc[0].length;
System.out.println(lengthI); // 4
System.out.println(lengthJ); // 2
for (int[] dire: dirc) {
int length = dire.length; // 每次从dirc[][]中取出一行元素放入dire[]中,因此length为dirc[][]的dirc.length
// dire[i] = dirc[i][]
System.out.println(length); // 2
}
2、while循环
- while循环语句标准格式:
while (循环条件语句①) {
? ?循环体语句②;
}
- while循环语句扩展格式:
初始化语句①;
while (循环条件语句②) {
? ?循环体语句③;
? ?迭代语句④;
}
do...while循环
- do...while循环标准格式:
do {
? ?循环体语句①;
} while (循环条件语句②);
- do...while循环扩展格式:
初始化语句①
do {
? ?循环体语句②;
? ?迭代语句③;
} while (循环条件语句④);
- 注意:
(1)while(循环条件)中循环条件必须是boolean类型
(2)do{}while();最后有一个分号
(3)do...while结构的循环体语句是至少会执行一次,这个和for和while是不一样的
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int positive = 0;
int nagetive = 0;
int num;
// 注意,num = in.nextInt();不可定义在初始语句,会造成死循环
do {
System.out.println("请输入整数(0)结束:");
num = in.nextInt();
if (num > 0) {
positive++;
} else if (num < 0) {
nagetive++;
}
} while (num != 0);
System.out.println(positive);
System.out.println(nagetive);
}
4、循环语句的区别
- 从循环次数角度分析:
do...while循环至少执行一次循环体语句
for和while循环先循环条件语句是否成立,然后决定是否执行循环体,至少执行零次循环体语句
- 从循环变量的生命周期角度分析
for循环的循环变量在for()中声明的,在循环语句结束后,不可以被访问;
while和do...while循环的循环变量因为在外面声明的,所以while和do...while结束后可以被继续使用的;
- 如何选择
遍历有明显的循环次数(范围)的需求,选择for循环
遍历没有明显的循环次数(范围)的需求,循环while循环
本质上:三种循环之间是可以互相转换的,都能实现循环的功能
- 三种循环结构都具有四要素:
(1)循环变量的初始化表达式
(2)循环条件
(3)循环变量的修改的迭代表达式
(4)循环体语句块
5、控制语句区别
- break
break用于完全结束一个循环,跳出循环体。不管是哪种循环,一旦在循环体中遇到break,系统将完全结束循环,开始执行循环之后的代码。 break不仅可以结束其所在的循环,还可结束其外层循环。此时需要在break后紧跟一个标签,这个标签用于标识一个外层循环。Java中的标签就是一个紧跟着英文冒号(:)的标识符。且它必须放在循环语句之前才有作用。
public static void main(String[] args) {
// 外层循环,outer作为标识符
outer:
for (int i = 0; i < 2; i++) {
System.out.println("外层循环第:" + i);
for (int j = 0; j < 3; j++) {
System.out.println("内层循环第:" + j);
// 跳出outer标签所标识的循环
break outer;
}
}
}
// 外层循环第:0
// 内层循环第:0
- continue
continue的功能和break有点类似,区别是continue只是中止本次循环,接着开始下一次循环。而break则是完全中止循环。
public static void main(String[] args) {
for (int i = 0; i < 4; i++) {
System.out.println("循环第:" + i);
if (i == 1){
// 忽略本次循环的剩下语句
continue;
}
}
}
// 循环第:0
// 循环第:2
// 循环第:3
- return
return关键字并不是专门用于跳出循环的,return的功能是结束一个方法。 一旦在循环体内执行到一个return语句,return语句将会结束该方法,循环自然也随之结束。与continue和break不同的是,return直接结束整个方法,不管这个return处于多少层循环之内。
public static void main(String[] args){
// 一个简单的for循环
for (int i = 0; i < 3 ; i++ ){
System.out.println("i的值是" + i);
if (i == 1){
return;
}
System.out.println("return后的输出语句");
}
}
// i的值是0
// return后的输出语句
// i的值是1
部分内容参考:原文链接:https://blog.csdn.net/weixin_41043145/article/details/93780940
以上是关于JavaSE之流程控制结构的主要内容,如果未能解决你的问题,请参考以下文章