java基础学习入门第六天——java流程控制(完整版)

第三章java基础学习——流程控制结构

3.1流程控制

3.1.1什么是流程控制?
  • 在程序运行期间,会改变程序运行的顺序的指令
3.1.2流程控制分类
  • 在编程语言中,程序在运行期间可以通过如下的流程进行控制:
    • 顺序结构
    • 分支结构
    • 循环结构
i.顺序结构
  • 程序自上而下依次执行。比如编写学习的main方法就是一个典型的顺序结构。
ii.分支结构
  • 程序从两条或更多条路径中选择一条去执行
(1)if单分支结构
  • 书写规范:
if(表达式){
		执行语句;
}
  • 用法案例:
public class Demo01{
	public static void main(String[] args){
		//声明两个变量比较大小打印输出大的数
		//用随机数在范围[30-86]中产生两个数
		int num1=(int)(Math.random()*57+30);
 		int num2=(int)(Math.random()*57+30);
		//声明一个变量存放大的数
		int max=num1>num2?num1:num2;
 		System.out.println("num1:"+num1+",num2:"+num2+",max:"+max);
		if(num1>num2){
		System.out.println("num1和num2而言,num1大,值是:"+num1);
		}
		System.out.println("num1和num2而言,num2大,值是:"+num2);
	}
}
  • 执行顺序:
    • 先判定if中的表达式的值,如果表达式的值是true,则执行执行语句,整个if就执行结束了。如果后续还存在代码,则继续执行后续代码。
    • 如果if中表达式的值是false,则跳过整个if单分支结构,继续之后后续代码。
  • 注意事项
    • if中的表达式一定是一个boolean值。
    • if大括号中只存在一行代码时,可以不写大括号,但是不推荐。
    • 对于单分支而言,罗列的情况是比较单一的。
(2)if双分支结构
  • 书写规范:
if(表达式){
		执行语句1;
}else{
		执行语句2;
}
  • 用法案例:
public class Demo02{
	public static void main(String[] args){
		//声明两个变量比较大小打印输出大的数
		//用随机数在范围[30-86]中产生两个数
		int num1=(int)(Math.random()*57+30);
		int num2=(int)(Math.random()*57+30);
        //用if来判断两个数中最大值
		if(num1>num2){
			System.out.println("num1和num2而言,num1大,值是:"+num1);
		}else{
			System.out.println("num1和num2而言,num2大,值是:"+num2);
		}
		System.out.println("程序执行完毕");
	}
}
  • 执行顺序
    • 先判定if中的表达式的值,如果表达式的值是true,则执行执行语句1,整个if就执行结束了。如果后续还存在代码,则继续执行后续代码。
    • 如果if中表达式的值是false,则执行执行语句2,整个if-else执行结束,如果后续还存在代码,则继续执行后续代码。
  • 注意事项
    • if中的表达式一定是一个boolean值。
    • if和else大括号中只存在一行代码时,可以不写大括号,但是不推荐。
    • 对于双分支而言,罗列的情况是比较单一的。
(3)if多分支结构
  • 书写规范:
if(表达式1){
		执行语句1;
}else if(表达式2){
		执行语句2;
}else if(表达式3){
		执行语句3;
}elseif(表达式4){
		执行语句4;
}...............{
		执行语句n;
}else{
		执行语句n+1;
}
  • 用法案例:
//产生一个50-100之间的随机数,查看当前分数对应的等级
public class Demo03{
	public static void main(String[] args){
        //1:产生一个50-100之间的随机数
		int score=(int)(Math.random()*51+50);
  		System.out.println(score);
		//2:通过多分支进行判定
		if(score==100){
			System.out.println("天秀荣耀王者");
		}else if(score<100&&score>=90){
			System.out.println("优秀最强王者");
		}else if(score<90&&score>=80){
			System.out.println("蒂花之秀至尊星耀");
		}else if(score<80&&score>=70){
			System.out.println("地秀永恒砖石");
		}else if(score<70&&score>=60){
			System.out.println("你就是弟弟尊贵铂金");
		}else{
			System.out.println("倔强青铜");
		}
		System.out.println("远离游戏,珍爱生命");
	}
}
  • 执行顺序:
    • 首先判定表达式1的值,如果表达式1的值是true,则执行对应的执行语句1;则整个if-else多分支全部执行结束,执行if多分支结构之后后续程序。
    • 如果表达式1的结果是false,则判定表达式的2的值;如果表达式2的值是true’,则执行对应的执行语句2;以此类推…;如果上述所有的表达式都不满足条件,则直接执行else中的执行语句n+1,整个if-else多分支执行结束,执行if多分支结构之后后续程序。
  • 注意事项:
    • if多分支结构中if的表达式一定是一个boolean的值
    • if和else if大括号中只存在一行代码时,可以不写大括号,但是不推荐。
    • 建议在多分支中加入最后的一个else,用来将所有的分支、情况除外的情况都能够补充,罗列出基本上所有的情况。
(4)switch结构
  • 书写规范:
switch(表达式){
    case1:
    执行语句1;
    break;
    case2:
    执行语句2;
    break;
    case3:
    执行语句3;
    break;
    case4:
    执行语句4;
    break;
    case5:
    执行语句5;
    break;
    .
    .
    .
    default:执行语句N;break;
 }
  • 用法案例:
/*一年四季,一年有12个月份针对不同的月份编写输出内容*/
public class Demo4{
	public static void main(String[] rgs){
        //1:用随机方法产生一个月份
        int month=(int)(Math.random()*12+1);
        System.out.println("月份是:"+month);
        //2:通过switch进行判定
        switch(month){
        case12:
        case1:
        case2:
        System.out.println("大约在冬季。。。。");
        break;
        case3:
        case4:
        case5:
        System.out.println("小燕子穿花衣年年春天来这里");
        break;
        case6:
        case7:
        case8:
        System.out.println("夏天夏天悄悄过去留下甜蜜蜜");
        break;
        case9:
        case10:
        case11:
        System.out.println("就让秋风带走我的思念");
        break;
        default:
        System.out.println("你丫家里有"+month+"月");break;
        }
        System.out.println("后续代码。。。。。");
    }
}
  • 执行顺序:
    • 判断计算表达式的值
    • 逐步匹配对应的case的值,如果存在对应的case得值,则执行case对应的执行语句;如果没有则继续向下寻找新的case,直到找到为止,再如果没有找到执行case的值,就执行default对应的执行语句;碰到指定的case的值之后,执行完对应的执行语句,那么整个switch则执行结束。如果之后还有程序,就执行之后程序。
  • 注意事项:
    • 注意case可以穿透,为了防止case穿透,在对应的执行语句后一定要加break;
    • default的存在是用来加强整个switch的健壮性(尽量使得将所有情况都罗列出来)
    • default语句可以存在当前switch中的任意位置,但是一般情况下放在整个switch的最后,否则可能引起程序的逻辑错误。
    • switch而言表达式只能是byte、short、char、int类型,其它基本类型除了boolean类型之外可以通过强制转化进行书写。jdk1.5之后switch中增加了对于Enum(枚举)的支持,JDK1.7之后switch中增加了对于String(字符串)的支持
iii.循环结构
  • 指在程序中需要反复执行某个功能而设置的一种程序结构
(1)while循环
  • 书写规范:
while(循环表达式){
			循环体;
}

  • 用法案例:
public class Demo5{
    public static void main(String[] args){
        int num=1;
        int sum=0;
        while(num<=100){
            sum=sum+num;
            num++;
		}
		System.out.println("num="+num+",sum"+sum);
    }
}

  • 执行顺序:
    • 判定循环表达式,如果表达式的结果是true,则执行循环体1次,继续判定循环表达式,直到循环表达式为false,整个while循环执行结束,
      执行后续代码
  • 注意事项:
    • 循环表达式是一个boolean值
    • while循环是不确定循环次数,但是确定循环的终止条件
    • while循环中的循环表达式目前而言。如果一直为true,那么导致当前循环为死循环,现阶段而言是没有意义的,所以应该避免。
(2)do-while循环
  • 书写规范:
do{
		循环体
}while(循环条件);

  • 用法案例:
public class Demo6{
    public static void main(String[] args){
        int num=1;
        int sum=0;
        do{
            sum=sum+num;
            num++;
		} while(num<=100);
		System.out.println("num="+num+",sum"+sum);
    }
}

  • 执行顺序:
    • 先执行do里面的循环体,再判定循环条件,如果循环条件为true,则继续执行循环体一次,直到条件不满足,不再进行循环,执行后续代码
    • 循环条件为false,则跳过do-while循环
  • 注意事项:
    • do-while中的while中循环条件是一个boolean值
    • do-while循环是不确定循环次数,但是确定循环的终止条件
    • 对于do-while循环而言,首先要执行循环体一次,后判定是否要继续执行循环体,而while循环需要先判定然后再决定是是否执行循环体。例如:针对于英语4,6级考生考试而言,我们应该使用do-while循环。
(3)for循环
  • 书写规范:
for(;;){
		循环体;
}

for(声明循环变量;循环条件表达式;改变循环变量表达式){
		循环体;
}

  • 用法案例:
public class Demo7{
    public static void main(String[] args){
        int sum=0;
        for(int num=1;num<=10;num++){
           sum+=num;
       }
		System.out.println("num="+num+",sum"+sum);
    }
}

  • 执行顺序:
    • 声明循环变量(只做一次)
    • 判定循环表达式,如果表达式的结果是true,则执行循环体一次,执行改变循环变量的值;准备进行下一次循环,判定循环表达式,以此类推,直到表达式的结果是false,则结束整个for循环,for循环执行完毕之后,执行后续代码。
  • 注意事项:
    • 对于普通的for循环而言,循环变量外界是无法访问的。(后续讲解)
    • 对于for循环而言,只要保证第一个是声明循环变量,对于循环变量的类型是没有要求的,可以是基本数据类型也可以是引用类型
  • 总结三个循环之间的区别:
    • for可以确定循环次数的
    • while确定循环停止条件
    • do-while先执行循环体一次

思考题:观察一下两个代码,哪个会报错?什么原因?

public class Demo8{
    public static void main(String[] args){
        int num=1;
		int sum=0;
		boolean flag=true;
		while(flag){
			sum=sum+num;
			num++;
		}
		System.out.println("num="+num+",sum"+sum);
    }
}

public class Demo9{
    public static void main(String[] args){
        int num=1;
		int sum=0;
		while(true){
			sum=sum+num;
			num++;
		}
		System.out.println("num="+num+",sum"+sum);
    }
}

答:对于Demo9.java编译会报错,原因:对于flag的值,由于编译期间,编译只做语法和语义及格式检查,只有真正的运行时才会确定flag的值。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

QZP51ZX

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值