分支结构
当需要进行条件判断的时候,并且更具条件是否成立来选择执行某一段代码的时候,需要分支结构。
if结构
<1>语法
if(条件表达式){
语句块1; -- 多条语句的集合,当然也可以是一条语句。
}
语句块2;
if(3 > 2){
a = 5;
}
a = 6;
<2>执行流程
判断条件表达式是否成立
=> 假如条件成立,则执行语句块1 =>语句块2;
=> 如果不成立,则直接执行语句块2,跳过语句块1
if-else 分支结构
<1>语法
if(条件表达式){
语句块1;
}
else{
语句块2;
}
语句块3;
<2>执行流程
判断条件是否成立
=> 若成立,执行语句块1,执行语句块3;
=>不成立,执行语句块2,执行语句块3;
if-else if-else分支结构
<1>语法
if(条件表达式){
语句块1;
}else if(条件表达式2){
语句块2;
}else{
语句块3;
}
语句块4;
<2>执行流程
判断条件是否成立
=> 若成立,执行语句块1,执行语句块4;
=> 若不成立,判断条件表达式2是否成立
=> 若成立,执行语句块2,执行语句块4;
=> 若不成立,执行语句块3,执行语句块4;
switch-case 结构
<1>语法
switch(表达式/变量){
case 字面值1:
语句块1;
break;
case 字面值2:
语句块2;
break;
default:
语句块3;
}
语句块4;
<2>执行流程
计算变量/表达式的数值 => 判断是否匹配字面值1;
=>如果匹配,则执行语句块1,执行语句块4;
=>如果不匹配,则判断是否匹配字面值2
=>匹配,执行语句块2,执行语句块4,
=>不匹配,则执行语句块3,执行语句块4
循环结构
当需要在某一个场合进行条件的判断,有所选择的去执行一段代码,需要分支结构
当需要在某个场合重复去做一件事情,需要使用循环结构
for循环
<1>语法格式
for(初始表达式1;条件表达式2;修改初始条件的表达式3){
语句块1;//(循环体)
}
语句块2;
<2>执行流程
执行初始表达式1=>判断条件表达式2是否成立
=>成立,则执行语句块1=>修改初始条件的表达式3 =>判断条件表达式2是否成立
=>不成立,则执行语句块2;
break和continue
break关键字可以用于switch-case结构和循环中,表示跳出当前结构执行后续的语句;
continue关键字只能用于循环结构中,表示结束本次循环继续下一次循环(熟悉)
特殊的循环
for(;;){} - 这种没有明确循环条件的循环叫做无限循环,俗称“死循环”。
通常使用在没有明确循环次数的场合中,与break关键字搭配使用。
双重循环
<1>语法格式
for(初始表达式1;条件表达式2;修改初始条件的表达式3){
for(初始表达式4;条件表达式5;修改初始条件的表达式6){
语句块1;//(循环体)
}
}
<2>执行流程
执行表达式1=>判断条件表达式2是否成立
=>成立,则执行初始表达式4 => 判断条件表达式5是否成立
=>成立,则执行语句块(循环体); => 执行表达式6 =>条件表达式5是否成立
=>不成立,则语句块(循环体)结束 => 执行表达式3 =>判断条件表达式2是否成立
=>不成立,则外层循环结束。
while循环
<1>语法格式
while(条件表达式){
循环体;
}
语句块;
<2>执行流程
判断条件表达式是否成立
=>成立,执行循环题 => 判断条件表达式是否成立
=>不成立,则执行语句块
<3>注意事项
1.while循环和for循环是可以互补的。
2.while循环通过使用在明确循环条件但不明确循环次数的场合中;
for循环通常使用在明确循环次数/范围的场合中使用.(推荐)
3.与for(;;){} 都表示无限循环的方式是 : while(true){}
do-while
<1>语法格式
do{
循环体;
}while(条件表达式);
语句块;
<2>执行流程
执行循环体=> 判断条件表达式是否成立
=>成立,则执行循环体=>判断条件表达式是否成立
=>不成立,则执行语句块。
<3>注意事项
do-while循环通常使用在至少需要执行一次循环体的场合中,而while循环可以不执行。
三种循环的使用场景
1、如果知道循环次数,使用for循环。
2、如果不知道循环次数,只知道结束条件,使用while循环。
3、如果无论如何都要执行一次程序,则使用do-while循环
三种循环都可以应对所以情况,知识看方不方便
递归
递归是自调的一种算法,就是方法本身自己调用自己,所形成的循环。
// 经典汉罗塔问题
public static void hanoi(int n,int p1,int p2,int p3)
{
if(1==n)
System.out.println("盘子从"+p1+"移到"+p3);
else
{
hanoi(n-1,p1,p3,p2);
System.out.println("盘子从"+p1+"移到"+p3);
hanoi(n-1,p2,p1,p3);
}
}
public static void main(String[] args) {
/*4表示盘数,1表示开始柱子,2表示开始柱子,3表示开始柱子*/
hanoi( 4, 1, 2, 3);
}