流程控制
概述
在一个程序执行的过程中,各条语句的执行顺序对程序的结果是有直接影响的。也就是说,程序的流程对运行结果有直接的影响。所以,我们必须清除每条语句的执行流程。而且,很多时候我们要通过控制语句的执行顺序来实现我们要完成的功能。
顺序结构
public static void main(String[] args) {
System.out.println(1);
System.out.println(2);
System.out.println(3);
}
判断语句--if(选择结构)
执行流程:
首先判断关系表达式看其结果是yrue还是false
如果是true就执行语句体
如果是false就不执行语句体
public static void main(String[] args) {
System.out.println("开始");
//定义两个变量
int a = 10;
int b = 20;
//变量使用if判断
if (a == b) {
System.out.println("a等于b");
}
int c = 10;
if(a==c){
System.out.println("a等于c");
}
System.out.println("结束");
}
判断语句--if...else
执行流程:
首先判断关系表达式看其结果是true还是false
如果是true就执行语句体1
如果是false就执行语句体2
public static void main(String[] args) {
//判断给定的数据是奇数还是偶数
//定义变量
int a=1;
if(a%2==0){
System.out.println("a是偶数");
}else
{
System.out.println("a是奇数");
}
System.out.println("结束");
}
判断语句if..else if..else
//案例1 判断数字范围
public static void main(String[] args) {
// x和y的关系满足如下:
// x>=3 y = 2x + 1;
// ‐1<=x<3 y = 2x;
// x<=‐1 y = 2x – 1;
// 根据给定的x的值,计算出y的值并输出。
// 定义变量
int x = 5;
int y;
if (x >= 3) {
y = 2 * x + 1;
} else if (x >= -1 && x < 3) {
y = 2 * x;
} else {
y = 2 * x + 1;
}
System.out.println("y的值是:" + y);
}
//案例2 指定考试成绩,判断学生等级
public static void main(String[] args) {
int score=95;
if(score<0 || score>100){
System.out.println("你的成绩是错误的");
}else if(score>=90 && score<=100){
System.out.println("你的成绩属于优秀");
}else if(score>=80 && score<90){
System.out.println("你的成绩属于好");
}else if(score>=70 && score<80){
System.out.println("你的成绩属于良");
}else if(score>=60 && score<70){
System.out.println("你的成绩属于及格");
}else{
System.out.println("你的成绩属于不及格");
}
}
if语句和三元运算符的互换
public static void main(String[] args) {
int a = 10;
int b = 20;
//定义变量,保存a和b种的较大值
int c;
if (a > b) {
c = a;
} else {
c = b;
}
//可以将上述功能改写为三元运算符的形式
c = a > b ? a : b;
}
选择语句---switch
执行流程:
这里要注意一点是if语句种条件必须为boolean表达式 而switch则是任意表达式
首先计算出表达式的值
其次,和case依次比较,一旦有对应的值,就会执行相应的语句,遇到break就会结束。
最后,如果所有的case都和表达式的值不匹配,就会执行default语句体部分,然后程序结束掉。
//案例 根据给定的数字判断今天星期几
public static void main(String[] args) {
//定义变量,判断是星期几
int weekday=6;
//switch语句实现
switch(weekday){
case 1:
System.out.println("星期一");
break;
case 2:
System.out.println("星期二");
break;
case 3:
System.out.println("星期三");
break;
case 4:
System.out.println("星期四");
break;
case 5:
System.out.println("星期五");
break;
case 6:
System.out.println("星期六");
break;
case 7:
System.out.println("星期天");
break;
default:
System.out.println("你输入的数字有误!");
break;
}
}
case的穿透性
在switch语句中,如果case的后面不写break,将出现穿透现象,也就是不会在判断下一个case的值,直接向后运行,直到遇到break,或者整体switch结束。
//案例
public static void main(String[] args) {
int i = 5;
switch (i){
case 0:
System.out.println("执行case0");
break;
case 5:
System.out.println("执行case5");
case 10:
System.out.println("执行case10");
default:
System.out.println("执行default");
}
}
上述程序执行完以后,执行case5后,由于没有break语句,程序会一直往后走,不会在判断case,也不理会break,直接运行完整体switch语句。
由此需要注意,case语句具有穿透性,必须要加上break语句(特殊情况除外)。
循环语句--for
for(初始表达式1;布尔表达式2;步进表达式4){
循环体3;
}
执行流程:
1234>234>234>..2不满足为止
1负责完成循环变量的初始化
2负责判断是否满足循环条件,不满足则跳出循环
3为具体执行的语句
4循环后,循环条件所涉及变量的变化情况
//循环练习:使用循环,计算1-100之间的偶数和
public static void main(String[] args) {
//定义一个初始化变量,记录累加求和,初始值为0
int sum = 0;
//2.利用for循环获取1-100之间的数字
for (int i = 1; i <= 100; i++) {
//3.判断获取的数组是奇数还是偶数
if (i % 2 == 0) {
//4.如果是偶数就累加求和
sum += i;
}
}
}
循环语句--while
格式:
初始化表达式1
while(布尔表达式2){
循环体3
步进表达式4
}
执行流程:
执行顺序:1234>234>234...2不满足为止
1负责完成循环变量初始化
2负责判断是否满足循环条件,不满足则跳出循环
3具体执行的语句
4循环后,循环变量的变化情况
//案例 实现累加求和
public static void main(String[] args) {
//使用while循环实现
//定义一个变量,记录累加求和
int sum = 0;
//定义初始表达式
int i = 1;
//使用while循环让初始表达式的值变化
while (i <= 100) {
//累加求和
sum += i;
//步进表达式改变变量的值'
i++;
}
}
循环语句--do...while
初始表达式1
do{
循环体3
步进表达式4
}while(布尔表达式3);
执行流程:
执行顺序:134>234>234...2不满足为止
1负责完成循环变量的初始化
2负责判断是否满足循环条件,不满足则跳出循环
3具体执行的语句
4循环后,循环变量的变化情况
do...while循环的特点,无条件执行一次循环,即使我们将循环条件直接写成false,也依然会循环一次。这样的循环具有一定的风险性。
循环语句的区别
for跟while的小区别:
1.控制条件语句所控制的那个变量,在for循环结束后,就不能在被访问到了,而while循环结束还可以继续使用,如果你还想继续使用,就用while,否则推荐使用for,原因是for循环结束,该变量就从内存中消失了,能提高内存的使用效率。
在已知循环次数的时候使用for,循环次数未知的时推荐使用while(布尔表达式为true,从内部直接break来以此结束循环)
break:终止switch或者循环
continue:结束本次循环,继续下一次的循环
嵌套循环
//案例 打印直角三角形
public static void main(String[] args) {
for (int i = 1; i <=5; i++) {
for(int j=1;j<=i;j++){
System.out.print("*");
}
System.out.println();
}
}