一、概述
- 流程控制语句是用来控制语句执行顺序,完成一定功能;
- 流程控制语句常用的是选择语句和循环语句;
二、选择结构
1、 if单选择结构
- 如果if语句不写{},则只能作用于后面的第一条语句;
- Math.random()该方法用于产生一个 0 到 1 区间的 double 类型的随机数,但是不包括1;
2、if-else双选择结构
- 三目条件运算符可以替代 if else;
3、if-else if-else多选择结构
4、switch结构
(1)语法
switch (表达式) {
case 值1:
语句序列1;
[break];
case 值2:
语句序列2;
[break];
… … … … …
[default:
默认语句;]
}
(2)注意
- 表达式的数据类型只能是 byte、short、char、int 四种整形类型,枚举类型和 String 类型;
- switch 语句具有穿透性,即有一个 case 匹配之后,会一直往后执行,直到遇到 break;
三、循环结构
1、while循环
2、do-while循环
- 循环体至少会执行一次;
3、for循环
- for 循环的执行顺序;
- 在控制表达式的 初始化 和 步进控制 部分,可使用由逗号分隔的表达式,这些表达式均会独立执行;
- 初始化部分变量的数量任意,但都属于同一类型;
- while(true) 与 for( ; ; ) 是无限循环;
4、嵌套循环
- 任意的循环可以相互嵌套多层;
5、break 和 continue
- 带标签的 break 和 continue;
public class BianLiang {
public static void main(String[] args) {
outer:for (int i = 101; i < 150; i++) {
for (int j = 2; j < i / 2; j++) {
if(i % j == 0)continue outer;
}
System.out.print(i+" ");
}
}
}
6、语句块
(1)定义:{}括起来的,作为一个整体执行,规定了变量的作用域;
(2)注意:语句块支持嵌套,但是嵌套的语句块里不支持同名变量;
7、方法
(1)实参的数目、类型和次序必须和形式参数列表匹配;
(2)方法调用传递参数时,传递的都是数据的副本;
(3)基本类型传递的是该数据值的copy值,所以对原来的值是不会有影响的;
(4)引用类型传递的是对象引用的copy值,指向的依然是同一个对象,所以传递引用类型会发生改变;
(5)方法的重载(overload)
- 方法名相同,参数列表不同(形参类型、形参个数、形参顺序不同);
- 只有返回值不同不构成方法的重载;
- 只有形参的名称不同,不构成方法的重载(String str 和 String s 本质是一样的);
8、递归
(1)本质:就是自己调用自己;
(2)递归的核心问题:结束条件和什么时候调用自己,没有结束条件将陷入死循环;
(3)注意:递归的写法虽然很简单,但是执行效率不高,尤其是递归的次数过多的时候,可以使用迭代解决;
(4)应用:斐波那契数列的计算
//求n!
public static int diGui(int n){
if(n == 1){
return 1;
}else{
return n*diGui(n-1);
}
}