智渔课堂官方免费教程六:Java基础之流程控制

时间:2021-10-31 19:27:13

一、流程控制

流程控制就是用控制语句,来控制程序的执行代码的顺序

控制语句

控制语句用于控制程序的流程,以实现程序的各种结构方式。
简单的说,就是控制软件在什么情况下,执行什么代码。
它们由特定的语句定义符组成。可分成以下三类:
1) 条件判断语句:if语句、switch语句;
2) 循环执行语句:do while语句、while语句、for语句;
3) 转向语句:break语句、continue语句、return语句。

一、选择结构

if和if-else

if语句格式:

if(条件表达式){
//代码:只有if中的布尔表达式结果为true的时候才会执行大括号中的代码
}

if之后可以不写大括号,如果不写,只有紧跟在if之后的第一条代码属于if;包括只写一个英文格式的分号(;空语句)

实例:
/**
* 演示if语句
* @author 学霸联盟 - 赵灿
*/
public class IfDemo {
public static void main(String[] args) {
//声明int类型的变量money,并赋值为1000
int money = 1000;
//判断变量money是否大于100
if(money > 100){
/*
* if语句的判断条件为true时,执行这里的代码;
* 判断条件为false,不执行这里的代码
*/
System.out.println("我有" + money + "元钱");
}
}
}
运行结果:我有1000元钱
小结:程序第一次执行money>100结果为true,所以会执行if语句块,结果为我有1000元钱

流程图如下

智渔课堂官方免费教程六:Java基础之流程控制


if-else  语法格式:

if(条件表达式){
//代码1
}else{
//代码2
}

if和else后面的大括号都可以不写,如果不写,其作用范围只包含紧跟其后的一条语句;

其中else不能独立存在,如果if后的大括号不写,else和if之间有且仅有一条语句

实例:
/**
* 演示if-else语句
* @author 学霸联盟 - 赵灿
*/
public class IfElesDemo {
public static void main(String[] args) {
//声明int类型的变量money,并赋值为1500
int money = 1500;
//判断变量money是否大于2000
if(money > 2000){
//if语句的判断条件为true时,执行这里的代码
System.out.println("买电脑");
} else {
//if语句的判断条件为false时,执行这里的代码
System.out.println("买手机");
}
}
}
运行结果:买手机

小结:程序第一次执行money>2000结果为false,直接执行else语句块,所以执行结果为买手机

智渔课堂官方免费教程六:Java基础之流程控制

多重if-else语法格式:

if(条件1){
//代码1
}else if(条件2){
//代码2
}
......
else{
//代码n
}

实例:
/**
* 演示多重if-else语句
* @author 学霸联盟 - 赵灿
*/
public class MultipleIfElesDemo {
public static void main(String[] args) {
//声明int类型的变量money,并赋值为2000
int money = 2000;
//判断变量money是否等于2000
if(money > 2000){
//money大于2000时,买电脑
System.out.println("买电脑");
} else if(money == 2000){
//money等于2000时,买Pad
System.out.println("买Pad");
} else {
//剩余情况就是money小于2000,买手机
System.out.println("买手机");
}
}
}
运行结果:买Pad

小结:程序第一次执行money>2000结果为false,所以不会执行if语句块,继续往下判断money==2000结果为true,所以执行结果为买Pad

 

    1、else不能单独存在,前面至少有一个if

    2、多重if-else 和 多个单独的if的区别:前者一旦执行了某个大括号中的代码,其后面的条件将不会进行判断,而多个if中,无论前面的if条件的结果是否为true,每个单独的if都会进行条件判断

智渔课堂官方免费教程六:Java基础之流程控制


if或if-else嵌套的语法格式:

if(条件表达式1){ 
System.out.println("代码1");
if(条件表达式2){
//代码
}
System.out.println("代码2");
}
if(条件表达式1){ if(条件表达式2){}else{} }
if(条件表达式1){ if(条件表达式2){}else{} }else{if(条件表达式2){}else{}}
if(条件表达式1 && 条件表达式2){ }<pre name="code" class="java">等等,可以根据需求任意嵌套,但建议不要超过三层

 
实例:
/**
* 演示嵌套if-else语句
* @author 学霸联盟 - 赵灿
*/
public class NestedIfElesDemo {
public static void main(String[] args) {
//声明int类型的变量money,并赋值为2000
int money = 2000;
//声明int类型的变量week,并赋值为6
int week = 6;
//判断week是否等于6或等于7
if (week == 6 || week == 7) {
// 判断变量money是否等于2000
if (money > 2000) {
// money大于2000并且是周六或周末时,去买电脑
System.out.println("买电脑");
} else if (money == 2000) {
// money等于2000并且是周六或周末时,买Pad
System.out.println("买Pad");
} else {
// 剩余情况就是money小于2000并且是周六或周末,买手机
System.out.println("买手机");
}
} else {
//week不等于6也不等于7,去上课
System.out.println("去上课");
}
}
}
运行结果:买Pad

小结:程序先判断week符合哪个条件,再判断money,声明时week赋值为6,money赋值为2000,所以结果是Pad

智渔课堂官方免费教程六:Java基础之流程控制

switch选择语句

switch语法格式:

switch(条件变量){
case 值1:
//代码块1
System.out.println(“代码块1”);
break;
case 值2:
//代码块2
System.out.println(“代码块2”);
case 值3:
//代码块3
System.out.println(“代码块3”);
break;
default:
//代码块default
System.out.println(“代码块default”);
}

实例:
/**
* 演示switch语句
* @author 学霸联盟 - 赵灿
*/
public class SwitchDemo {
public static void main(String[] args) {
//声明int类型的变量week,并赋值为4
int week = 4;
switch(week){
case 1:
//week等于1时执行这里
System.out.println("上语文课");
//break语句跳出switch结构
break;
case 2:
//week等于2时执行这里
System.out.println("上数学课");
//break语句跳出switch结构
break;
case 3:
//week等于3时执行这里
System.out.println("上英语课");
break;
case 4:
//week等于4时执行这里
System.out.println("上java课");
break;
case 5:
//week等于5时执行这里
System.out.println("上java课");
break;
case 6:
//week等于6时执行这里
System.out.println("在家休息");
break;
case 7:
//week等于7时执行这里
System.out.println("在家休息");
break;
}
}
}
运行结果:上java课

智渔课堂官方免费教程六:Java基础之流程控制


小结:week匹配的是case 4,然后执行case 4内的语句,输出上java课,然后执行break语句,结束了switch语句。所以break后的任何语句都不会再执行了

 

    switch语句中的条件变量允许的数据类型:char、byte、short、int、枚举和String(JDK1.7开始支持) 或者结果为以上类型的表达式

    条件变量是用于和case之后的常量进行匹配的,如果匹配成功(相等),就进入case块执行之下的代码块

    break:跳出整个switch结构,即结束switch结构

    如果没有遇到break,就会产生穿透效果;例如上面的代码块2下面没有break; 如果条件值等于值2,将会输出  代码块2  和  代码块n;直到遇到break结束或者之后的所有代码全部执行完结束

    default:所有case后的值都不等于条件值时执行default下的代码;default可以写在case之上,但不建议大家这样写;

    如果输入条件没有找到匹配的case,不论default写在什么位置,都会执行default下的代码

实例:
/**
* 演示switch语句
* @author 学霸联盟 - 赵灿
*/
public class SwitchPenetrateDemo {
public static void main(String[] args) {
//声明int类型的变量week,并赋值为1
int week = 1;
switch(week){
case 1:
System.out.println("上课1");
case 2:
case 3:
case 4:
case 5:
//week等于1,2,3,4,5时都执行这里,没有使用break语句产生穿透现象
System.out.println("上课5");
break;
case 6:
case 7:
//week等于6,7时都执行这里
System.out.println("在家休息");
break;
}
}
}
运行结果:
上课1
上课5

由结果可知,week匹配的是case 1,但是case 1后没有使用break结束switch结构,就导致了穿透现象,所以会输出两次上课

 

switch和if-else...的区别

    1、if的条件是boolean类型;switch的条件是:char byte short int 枚举  String

    2、if直接根据boolean类型的条件进行判断;switch用条件去匹配case后面的常量

    3、if判断可能是一个连续的区间;switch单个不连续的具体值


二、循环结构

用于多次执行相同代码操作的需求。例如,罚抄十遍课文

  1、while循环

       循环条件:boolean类型的值

       语法格式:

while(循环条件){
//循环体(代码)
}
智渔课堂官方免费教程六:Java基础之流程控制

实例:
/**
* 演示while循环语句
* @author 学霸联盟 - 赵灿
*/
public class WhileDemo {
public static void main(String[] args) {
//声明int类型的变量week,并赋值为1
//如果这里赋值为8,循环体一次都不执行
int week = 1;
//如果week小于等于7,执行循环体
while(week <= 7){
System.out.print ("星期" + week);
//循环一次,给week加一次1
week++;
}
}
}
运行结果
星期1星期2星期3星期4星期5星期6星期7

小结:先执行week<=7;判断的结果为true时才会执行循环体中的输出语句和week++;如果第一次判断结果就为false,循环体一次都不会被执行

do-while循环

       循环条件:boolean类型值

       语法格式:

do{
//循环体
}while(循环条件);

智渔课堂官方免费教程六:Java基础之流程控制

实例:
/**
* 演示do-while循环语句
* @author 学霸联盟 - 赵灿
*/
public class DoWhileDemo {
public static void main(String[] args) {
//声明int类型的变量week,并赋值为8
//无论这里赋值为多少,循环体至少被执行一次
int week = 8;
do{
System.out.println("星期" + week);
//循环一次,给week加一次1
week++;
//如果week小于等于7,执行循环体
}while(week <= 7);
}
}
运行结果:星期8

小结:程序先执行了一次输出语句,再执行week++;然后再执行week<=7;结果为false,跳出循环,如果判断结果为true,将继续执行循环体

 

    while和do-while的区别

       while:先判断后执行;循环体可能一次都不执行(当第一次判断循环条件就为false时,循环体不会被执行)

       do-while:先执行在判断;至少会执行一次循环体

       不写大括号:while循环体是紧跟在while之后的第一句

                 do-while之间只能有一条语句;如果循环体包含多条代码,并且没有使用大括号,就会产生编译错误

for循环

       语法格式:

for(初始化条件变量;条件表达式;修改条件变量){ 
//循环体
}
智渔课堂官方免费教程六:Java基础之流程控制

/**
* 演示for循环语句
* @author 学霸联盟 - 赵灿
*/
public class ForDemo {
public static void main(String[] args) {
//声明int类型的变量week,并赋值为5
//如果week大于7结束循环
for(int week = 5;week <= 7; week++){
System.out.println("星期" + week);
}
}
}
运行结果
星期5
星期6
星期7

小结:week=5;仅执行了一次,然后执行判断语句wee<=7;得到结果为true时,然后执行输出语句,最后执行week++;然后再执行week<=7;依此循环,直到week<=7的结果为false结束循环
for(;;){}如果循环条件被省略,循环条件默认为true,相当于for(;true;){ //循环体 }

总结:只要循环条件为true,程序就会执行循环体;循环条件为false或者在循环中遇到break时,程序退出循环

1、关键字break:

       用在switch结构或循环结构中
      作用:结束switch结构或循环结构;
      注意:在嵌套循环结构中结束循环时,仅结束离他最近的一层循环

2、关键字continue

       只能用在循环中       作用:结束本次(当前)循环,进入下一次循环



死循环

循环条件永远为true的循环结构,称为死循环。

一般情况下,应尽量避免出现死循环,因为一旦出现死循环,程序将不停的执行死循环的循环体,无法退出,并且会拖慢系统,甚至导致程序崩溃。

但死循环也不是毫无用处,例如:某些电视节目中会出现随机抽取幸运观众的需求,这个需求就可以使用死循环的方式,将所有参与的观众的姓名和手机号,不停的显示,当接收到指令时,使用break或return(结束方法,下一节讲到)关键字结束循环。