一、流程控制
流程控制就是用控制语句,来控制程序的执行代码的顺序
控制语句
控制语句用于控制程序的流程,以实现程序的各种结构方式。
简单的说,就是控制软件在什么情况下,执行什么代码。
它们由特定的语句定义符组成。可分成以下三类:
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元钱
流程图如下
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语句块,所以执行结果为买手机
多重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都会进行条件判断
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
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课
小结: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(循环条件){ //循环体(代码) }
实例: /** * 演示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(循环条件);
实例: /** * 演示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(初始化条件变量;条件表达式;修改条件变量){ //循环体 }
/** * 演示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(结束方法,下一节讲到)关键字结束循环。