第二章、Java基础语法(下)----程序流程控制
本人也是刚入门Java语言,可能会有一些地方出现错误,描述的不对。如果发现不对的地方请及时指出,好对其进行修改。这样不仅可以让我学到东西,也可以让其他刚入门的朋友学习更正确的内容。
所有内容仅供参考。不具有完全的准确性!
注:关于Java的所有内容都会参考到尚硅谷在网上公开的学习视频及其提供的PPT
前言
流程控制语句是用来控制程序中各语句执行顺序的语句,可以把语句组合成能完成一定功能的小逻辑模块。
其流程控制方式采用结构化程序设计中规定的三种基本流程结构,即:
1.顺序结构
2.分支结构
3.循环结构
一、顺序结构
程序从上到下逐行地执行,中间没有任何判断和跳转。
不能出现上边的语句调用下边语句的情况。
二、分支结构
分支语句一:if-else结构
推荐看:(https://blog.csdn.net/y396397735/article/details/82313636)
当if后边括号内的条件表达式不满足条件时(如:括号中为12 > 13,就属于不满足),if后的括号中的值就是false,此时不会执行对应的执行代码块。直接跳出if语句,继续执行后边的语句。反之,若满足,就是true,是true就执行代码块,然后继续之后if语句外的操作。
当if后边括号内的条件表达式不满足条件时(如:括号中为12 > 13,就属于不满足),此时会无需任何条件直接进入else的代码块并执行,执行结束跳出if-else语句,继续执行后边的代码。反之,若if后满足,就执行if后的代码块,执行结束直接跳出if-else语句,不执行else的代码块。
如果第一个条件表达式不满足,就判断第二个条件表达式,直到有一个满足的为止,若所有的条件都不满足,就执行else中的代码块(若没有else就跳出)。若有一个满足的,就执行对应的代码块。
注意:最多只会执行一个代码块或不执行任何代码块。
if-else使用说明:
- 条件表达式必须是布尔表达式(关系表达式或逻辑表达式)、布尔变量
- 语句块只有一条执行语句时,一对{}可以省略,但建议保留
- if-else语句结构,根据需要可以嵌套使用
- 当if-else结构是“多选一”时,最后的else是可选的,根据需要可以省略
- 当多个条件是“互斥”关系时,条件判断语句及执行语句间顺序无所谓
- 当多个条件是“包含”关系时,“小上大下 / 子上父下”
public class AgeTest{
public static void main(String args[]){
int age = 75;
if (age< 0) {
System.out.println("不可能!");
} else if (age>250) {
System.out.println("是个妖怪!");
} else {
System.out.println(“人家芳龄 " + age +" ,马马乎乎啦!");
}
}
}
输出结果:
人家芳龄75,马马乎乎啦!
分支语句二:switch-case结构
- switch(表达式)中表达式的值必须是下述几种类型之一:byte,short,
char,int,枚举 (jdk 5.0),String (jdk 7.0); - case子句中的值必须是常量,不能是变量名或不确定的表达式值;
- 同一个switch语句,所有case子句中的常量值互不相同;
- break语句用来在执行完一个case分支后使程序跳出switch语句块;如
果没有break,程序会顺序执行到switch结尾 - default子句是可任选的。同时,位置也是灵活的。当没有匹配的case时,
执行default
是否只会执行一个case代码块,答案:不一定。
因为当进入到对应case代码块执行代码时,如果最后没有写break语句,那么程序就会直接进入执行下边的一个case代码块(如果存在的话),不需要任何条件。
例:
int a = 2;
switch(a){
case 1:
System.out.println("我是小1");
case 2:
System.out.println("我是小2");
case 3:
System.out.println("我是小3");
case 4:
System.out.println("我是小4");
case 5:
System.out.println("我是小5");
}
输出结果:
我是小2
我是小3
我是小4
我是小5
当加入break以后:
int a = 2;
switch(a){
case 1:
System.out.println("我是小1");
break;
case 2:
System.out.println("我是小2");
break;
case 3:
System.out.println("我是小3");
break;
case 4:
System.out.println("我是小4");
break;
case 5:
System.out.println("我是小5");
break;
}
输出结果:
我是小2
if-else 和 switch-case相似,用的时候怎么区别?
- 如果判断的具体数值不多,而且符合byte、short 、char、int、String、枚举等几种类型。虽然两个语句都可以使用,建议使用swtich语句。因为效率稍高。
- 其他情况:对区间判断,对结果为boolean类型判断,使用if,if的使用范围更广。也就是说,使用switch-case的,都可以改写为if-else。反之不成立。
三、循环结构
在满足某种条件的情况下,反复执行特定的代码块,直到条件不满足或当满足某种条件时通过特定语句跳出循环。
循环语句的分类:
- for 循环
- while 循环
- do-while 循环
不使用循环语句计算5以内所有整数的和:
int a = 1;
int a1 = 2;
int a2 = 3;
int a3 = 4;
int a4 = 5;
System.out.println(a + a1 + a2 +a3 + a4);
使用循环以后:
int count = 0;
for (int i = 0; i < 6; i++) {
count += i;
}
System.out.println(count);
通过使用循环会极大的减少代码冗余。
循环语句的四个组成部分:
- 初始化部分
- 循环条件部分
- 循环体部分
- 迭代部分
(一)for 循环
- 语法格式
for (①初始化部分; ②循环条件部分; ④迭代部分){
③循环体部分;
} - 执行过程: ①—>②—> ③ —> ④ —>②—> ③ —> ④ —>… —>②
①:初始化部分可以声明多个变量,但必须同一个类型,逗号隔开
②:布尔型型的表达式(如 a < 15),当此处返回值为false时,跳出当前循环
③:需要重复执行的代码
④:对需要在②的位置比较的变量进行更新,可以对多个变量进行更新,逗号隔开
int count = 0; //用来求和
for (int i = 0; i <=100; i++) {
count += i; // 相当于:count = count + i;
}
System.out.println(count);`
(二)while 循环
- 语法格式
①初始化部分;
while(②条件表达式){
③循环体部分;
④迭代部分;
} - 执行顺序:①—>②—> ③ —> ④ —>②—> ③ —> ④ —>… —>②
注意:
- 不要忘记声明④迭代部分。否则,循环将不能结束,变成死循环。
- for循环和while循环可以相互转换
int count = 0; //计数求和
int i = 0; //① 初始化部分
while(i < 100){ //② 条件表达式
count += i; // ③ 循环体
i++; // ④ 迭代部分
}
System.out.println(count);
(三)do-while 循环
- 语法格式
①初始化部分;
do{
③循环体部分;
④迭代部分;
}while(②条件表达式); - 执行顺序:①—> ③ —> ④ —>②—> ③ —> ④ —>②… —>②
int count = 0; //计数求和
int i = 0; //① 初始化部分
do{
count += i;//③ 循环体
i++; //④ 迭代
}while(i < 100); //② 条件表达式
System.out.println(count);
注意:
- do-while循环语句最少执行一次循环体。(区分do-while 和 while)
- for和while可能一次都不执行。
- 任何一个循环都可以嵌套
嵌套示例:
计算十次十以内的和(也可以通过乘10来计算,此处只为演示嵌套)
int count = 0;
for (int i = 0; i < 10; i++) {
for (int j = 0; j <= 10; j++) {
count += j;
}
}
System.out.println(count);
补充:
特殊关键字:break,continue,return
break
- break:结束当前代码块(循环体,switch代码块等),继续执行当前代码块外的代码。
- 如果break出现在多层嵌套的代码块中,可以通过标签的形式指明要终止具体哪一层的代码。
例:
for (int i = 0; i < 10; i++) {
label:for (int k = 0; k < 10; k++) { //此处的label就是具体for循环的标签
for (int j = 0; j < 10; j++) {
if(j == 5){
break label;//跳出指定的for循环
}
}
}
}
continue
- continue只能使用在循环结构中
- continue:终止本次循环,进入到下一次循环。
- 出现在多层嵌套的循环语句体中时,可以通过标签指明要跳过的是哪一层循环(如上举例)
例:
当 i 对5取余为0时,就停止本次循环,继续下一次的循环
for (int i = 0; i < 100; i++) {
if(i % 5 == 0){
continue;
}
}
return
- return并非专门用来结束循环的,它的功能是结束一个方法。当一个方法执行到return时,就结束该方法的执行。(在同一个代码块中,return后的代码永远执行不到)
- return直接结束整个方法,无论return处于多少层循环之内
若需要转载请标注原创链接。