控制结构
一.顺序控制
程序从上到下逐行地执行,中间没有任何判断和跳转。
二.分支控制
1.if-else
(1).单分支:
基本语法:
if (条件表达式){
执行代码块;(可以有多条语句)
}
说明:当条件表达式为true时,就会执行{}的代码,如果为false就不执行。
(2).双分支:
基本语法:
if (条件表达式){
执行代码块1;
}
else{
执行代码块2;
}
说明:当表达式成立,执行1,否则执行2。
(3).多分支:
基本语法:
if (条件表达式1){
执行代码块1;
}
elseif (条件表达式2){
执行代码块2;
}
……
else{
执行代码块n;
}
(4).嵌套分支
规范:不要超过三层(可读性不好)
在一个分支结构(内层分支)中又完整的嵌套了另一个完整的分支结构(外层分支)。
基本语法:
if(){
if(){
//if-else...
}else{
//if-else
}
}
2.switch分支结构
基本语法:
switch(表达式){
case 常量1: //当...
语句块1;
break;
case 常量2:
语句块2;
break;
……
case 常量n:
语句块n;
break;
default:
default语句块;
break;
说明:
表达式对应一个值
case常量1:当表达式的值等于常量1,就执行语句块1
break:表示退出switch
如果和case常量1匹配就执行语句块1,如果没有匹配,就继续匹配下一个,如果一个都没有匹配,执行default
使用细节:
1.表达式数据类型应该和case后的常量类型一致,或者可以自动转成可以相互比较的类型,如输入的是字符,而常量是int。
2.switch中表达式的返回值必须是:byte,short,int,enum【枚举】,String中的某一种。
3.case子句中的值必须是常量或常量表达式,而不能是变量。
4.default子句是可选的,当没有匹配的case时,执行default,如果没有default也没有匹配任何常量,则没有输出。
5.break语句用来在执行完一个case分支后使程序跳出switch语句块,如果没有break,程序会顺序执行到switch结尾。
流程图:
if和switch的比较:
1.如果判断的具体数值不多,而且符合byte,short,int,char,enum,String这6种类型,虽然两个语句都可以使用,但建议使用switch语句。
2.其他情况:对区间判断,对结果为Boolean类型判断,使用if,if的适用范围更广。
三.循环控制
1.for循环控制
基本语法:
for(循环变量初始化;循环条件;循环变量迭代){
循环操作(可以多条语句);
}
流程图:
使用细节:
(1).循环条件是返回一个布尔值的表达式。
(2).for(;循环判断条件;)中的初始化和变量迭代可以写到其他地方,但是两边的分号不能省略。
这样写法i是全局的i,可以再次输出i的值,而若在for中定义初始化只能在for循环中使用。
补充:
for(;;){
System.out.println(“ok”);
}
表示无限循环,死循环
(3).循环初始值可以有多条初始化语句,但要求类型一样,并且中间用逗号隔开;循环变量迭代也可以有多条变量迭代语句,中间用逗号隔开。
编程思想:
1.化繁为简:将复杂的需求拆解成简单的需求,逐步完成。
2.先死后活:先考虑固定的值,然后转成可以灵活变化的值。
补充:增强for循环
2.while循环控制
基本语法:
while(循环条件){
循环体(语句);
循环变量迭代;
}
流程图:
3.do while循环控制
基本语法:
do{
循环体(语句);
循环变量迭代;
}while(循环条件);
说明:
do while是关键字
while和do while的区别:
while是先判断再执行;
do while是先执行再判断(一定会执行一次)
流程图:
4.多重循环控制(难点)
(1).将一个循环嵌套在另一个循环体上,就形成嵌套循环,其中,for,while,do while都可以作为外层和内层循环。
(2).实质上,嵌套循环就是把内层循环当作外层循环的循环体,当只有内层循环的循环条件为false时,才会完全跳出内层循环,才可结束外层的当次循环,开始下一次的循环。
(3).设外层循环次数为m次,内层为n次,则内层循环体实际上需要执行m*n次。
四.跳转控制语句
1.break
扩展:
System.out.println(Math.randow());
Math.randow()表示随机返回带正号的double值,该值大于等于0.0,小于1.0
(int)(Math.random()*100+1)表示返回1~100的随机整数
基本介绍:
break语句用于终止某个语句块的执行,一般使用在switch或者循环for,while,dowhile中。
基本语法:
{......
break;
......
}
以while使用break为例,示意图如下:
细节说明:
1.break语句出现在多层嵌套的语句块中时,可以通过标签指明要终止的是哪一层语句块。
标签的基本使用:
label1:{......
label2: {......
label3: {......
break label2;
......
}
}
}
(1)break后指定到哪个label就退出哪里。
(2)如果没有指定break,默认退出最近的循环体。
(3)实际开发中,尽量不要使用标签。
2.continue
基本介绍:
用于结束本次循环,继续执行下一次循环;也可以通过标签指明要跳过哪一层循环,和break一样。
基本语法:
{......
countinue;
......
}
以while使用continue为例的示意图:
3.return
一般使用在方法上,表示跳出所在的方法,在学习方法的时候,详细说明。
生成随机整数补充:
arr[i] = (int)(Math.random() * 100) + 1;//生成随机数1-100