3.1、结构化程序有三种结构
3.1.1、顺序结构
程序从上到下一行一行的执行代码,没有判断和中转
3.1.2、选择结构(分支结构)
3.1.2.1、switch语句
语法:
switch(表达式){
case 取值1: 语句块1;
break;
case 取值n: 语句块n;
break;
default: 语句块n+1;
break;
}
switch与if嵌套:
switch(表达式){
case 取值n: 语句块n;
if(表达式){…}
break;
default: 语句块n+1;
break;
}
switch语句有关规则:
表达式的返回值必须是下述几种类型之一:int, byte, char, short,确定的结果,jdk1.7后支持String
case子句中的取值必须是常量,且所有case子句中的取值应是不同的
default子句是可选的
break语句用来在执行完一个case分支后使程序跳出switch语句块;如果case后面没有写break则直接往下面执行
case后面的执行体可写{ }也可以不写{ }
Java 7 switch支持String的实现原理:
这个新特性是在编译器这个层次上实现的在编译的过程中,编译器会根据源代码的含义进行转换,不同的Java编译器可能采用不同的方式来转换
比如:如果switch语句中只包含一个case语句,那么就可以简单的将其转换成一个if语句。
如果包含一个case和一个default语句,就可以转换成if-else语句。而对于复杂的情况(多个case语句),也可以转换成Java 7之前的switch语句,只不过使用字符串的哈希值(整数)作为switch语句表达式的值
3.1.2.2、if与switch的区别
语法不同:
语句后表达式值的类型不同:
if语句表达式值的类型是boolean,switch分支表达式值的类型是byte,short,char,int,枚举,String
适用场景不同:
if:变量的值在某个区间之内
switch:变量的值是某个定值
3.1.2.3、if与三目运算区别
三目运算符都可以使用if语句实现,反之不成立
3.1.3、循环结构
3.1.3.1、有两种结构:当型和直到型
当型结构:
直到型:
3.1.3.2、循环语句功能
在循环条件满足的情况下,反复执行特定代码
3.1.3.3、环语句的四个组成部分
初始化部分:对循环变量赋初值
循环条件部分:判断循环变量是否超出某个界限
循环体部分:要循环执行的具体逻辑
迭代部分:修改循环变量的值
3.1.3.4、循环语句分类
for循环:
形式:
for(初始化部分;判断条件部分;迭代表达式){循环体}
执行过程:
首先计算表达式1,接着计算表达式2,若表达式2的值=true,则执行循环体,接着执行表达式3,再判断表达式2的值,依次重复下去,直到表达式2的值=false
流程:
for语句的几种特例:
1) 表达式2一般不可省略,否则为无限循环
例:for(int i =1;;i++){sum = sum+1}
相当于条件永真、永不为false,若用while表示,相当于
int i=1;
while(true){
sum = sum + i;
i++;
}
2) 表达式3亦可省略,但在循环体中必须有语句修改循环变量;以使表达式2在某一时刻为false而正常结束循环。
例:for(int sum =0,i=1;i<=100;){
sum = sum + i;
i++;
}
3) 若同时省略表达式1,表达式3,则相当于while(表达式2)语句。
int sum ,i
for(;i<=100;){sum+=i;i++;}
相当于
while(i<=100){
sum+=i;
i++;
}
4) 三个表达式均省略即for(;;)语句,此时相当于while(true)语句
5) 表达式1、表达式3可以是逗号表达式,以使循环变量值在修改时可以对其它变量赋值
例:for(int sum =0,i=1;i<=100;i=i+2)
等价于:
int sum = 0;
for(int i =1;i<=100;i=i+2)
while循环
while语句(“当”型循环)
形式:
while(boolean表达式){语句块}
执行过程:
先判断表达式的值,若为true,则执行其后面的语句,然后再次判断条件并反复执行,直到条件不成立为止
do/while循环
一种专门的“直到型”循环语句
形式:
do{语句块}while(表达式);
执行过程:
先执行语句,再判断表达式的值,若为true再执行语句,否则结束循环
流程:
多重循环
多重循环指的是循环之间的相互嵌套,被嵌套的称为内循环,嵌套内循环的称为外循环,循环可以多重循环
while语句与do/while语句的区别
当第一次执行时,若表达式=false时,则while语句与do/while有所不同,do/while执行一次后面的语句,而while不执行
几种循环的比较
对于同一个问题,三种循环可相互替代
for循环功能强于while,do…while但若不是明显地给出循环变量初终值(或修改条件),则可以用while或do…while以增强程序的结构化和可读性
要防止无限循环—–死循环
3.2、特殊流程控制语句
break语句:
break语句用于终止某个语句块的执行
语法:
{
......
break;
......
}
break语句出现在多层嵌套的语句块中时,可以通过标签指明要终止的是那一层语句块
语法:
label1:while(){
label2:for(){
label3:while(){
break label1;
}
}
}
continue语句:
continue语句用于跳过某个循环语句块的一次执行
continue语句出现在多层嵌套的循环语句体中时,可以通过标签指明要跳过的是哪一层循环。用法同break