Java程序流程控制

Java程序流程控制

流程控制语句

Java提供一些流程控制语句,来控制程序的执行流程

三大结构

顺序结构

程序默认流程

分支结构

if分支

根据判定的结果决定执行某个分支的代码

格式1
if(条件表达式){
	语句体;
}
格式2
if(条件表达式){
	语句体1;
}else{
	语句体2;
}
格式3
if(条件表达式1{
	语句体1;
}else if(条件表达式2{
	语句体2;
}else if(条件表达式3{
	语句体3;
}
...
else{
	语句体n+1;
}
public static void main(String[] args) {
        //需求:心跳(60-100)之间是正常的,否则系统提示进一步检查/格式1
        int heart = 30;
        if(heart < 60 || heart > 100){
            System.out.println("您的心跳数据是: "+heart+",您可能需要进一步检查!");
        }
        System.out.println("检查结束");

        //需求:发红包。格式2
        double money = 5999;
        //发送一个1314的红包
        if(money >= 1314){
            System.out.println("您当前发送红包成功");
        }else {
            System.out.println("您自己都没钱了,就别发了");
        }

        //坪效系统:0-60 C  60-80 B  80-90 A 90-100 A+,表达式3
        int score = 99;
        if (score >= 0 && score < 60){
            System.out.println("您本月的绩效是: C");
        }else if(score >= 60 && score < 80){
            System.out.println("您本月的绩效是: B");
        }else if(score >= 80 && score < 90){
            System.out.println("您本月的绩效是: A");
        }else if(score >= 90 && score <=100){
            System.out.println("您本月的绩效是: A+");
        }else {
            System.out.println("您录入的分数有毛病!");
        }
    }
switch

  也是匹配条件去执行分支,适合做值匹配的分支选择,结构清晰,格式良好
执行流程:
1、先执行表达式的值,再拿这个值去与case后的值进行匹配
2、匹配哪个case的值为true就执行哪个case,遇到break就跳出switch分支
3、如果case后的值都不匹配则执行default代码

public static void main(String[] args) {
        //周一:埋头苦干,解决bug  周二:请求大牛程序员帮忙  周三:今晚啤酒,小龙虾,烧烤
        //周四:主动帮助新来的女程序员解决bug  周五:今晚cs:go 周六:今晚与朋友聚一聚  周日:郁郁寡欢,准备上班
        String weekday = "周三";
        switch (weekday){
            case"周一":
                System.out.println("埋头苦干,解决bug");
                break;
            case"周二":
                System.out.println("请求大牛程序员帮忙");
                break;
            case"周三":
                System.out.println("今晚啤酒,小龙虾,烧烤");
                break;
            case"周四":
                System.out.println("主动帮助新来的女程序员解决bug");
                break;
            case"周五":
                System.out.println("今晚cs:go");
                break;
            case"周六":
                System.out.println("今晚与朋友聚一聚");
                break;
            case"周日":
                System.out.println("郁郁寡欢,准备上班");
                break;
            default:
                System.out.println("数据有误!");
        }
    }

注意事项:
1、表达式类型只能是byte、short、int、char,JDK5开始支持枚举,JDK7支持String、不支持double,float,long。
2、case给出的值不允许重复,且只能是字面量,不能是变量。
3、不要忘记写break,否则会出现穿透现象。
小数运算在Java中是不精确的
switch的穿透性:
  如果代码执行到没有写break的case块,执行完后将直接进入下一个case块执行代码(而且不会进行任何匹配),直到遇到break才跳出分支,这就是switch的穿透性

public static void main(String[] args) {
        //1,3,5,7,8,10,12月份是31天
        //2月份闰年是29天,非闰年是28天
        //4,6,9,11月份是30天
        int month = 7;
        switch (month){
            case 1:
            case 3:
            case 5:
            case 7:
            case 8:
            case 10:
            case 12:
                System.out.println(month +"月是31天!");
                break;
            case 2:
                System.out.println(month +"月闰年是29天,非闰年是28天!");
                break;
            case 4:
            case 6:
            case 9:
            case 11:
                System.out.println(month +"月是30天!");
                break;
            default:
                System.out.println("数据有误!");
        }
    }

循环结构

for

控制一段代码反复执行很多次

格式:
for(初始化语句;循环语句;迭代语句){
	循环体语句(重复执行的代码);
}
public static void main(String[] args) {
        for (int i = 0 ; i < 3 ; i++){
            System.out.println("Hello World");//执行三遍
        }
        System.out.println("---------");
        for (int i = 1 ; i < 3 ; i++){
            System.out.println("Hello World");//执行两遍
        }
        System.out.println("---------");
        for (int i = 1 ; i <= 3 ; i++){
            System.out.println("Hello World");//执行三遍
        }
    }
while
初始化语句;
while(循环条件){
	循环体语句(被重复执行的代码);
	迭代代码;
}
public static void main(String[] args) {
        int i = 0;
        while (i < 3){
            System.out.println("Hello World");
            i++;
        }
    }

什么时候用for循环,什么时候用while循环?
  功能上是完全一样的,for循环能解决的事情while也能解决,反之亦然。使用规范是:知道循环几次:使用for;不知道循环几次建议使用:while

//需求:珠穆朗玛峰高度是8848860,纸张厚度是0.1,折叠纸张知道不低于珠穆朗玛峰高度,求折叠几次
    public static void main(String[] args) {
        double peakHeight = 8848860;
        double paper = 0.1;
        int count = 0;
        while (paper < peakHeight){
            paper *= 2;
            count ++;
        }
        System.out.println("折叠的次数: "+count);
        System.out.println("纸张最终的厚度: "+paper);
    }
do…while

  先执行再判断循环条件

初始化语句;
do{
	循环体语句;
	迭代语句;
}while(循环条件);
public static void main(String[] args) {
        int i = 0;
        do{
            System.out.println("Hello World");
            i++;
        }while (i < 3);
    }

特点:一定会先执行一次循环体。
eg:抢票

三种循环的区别

1、for 和 while (先判断后执行),do…while (第一次执行后判断)
2、for循环和while循环的执行流程是一模一样的,如果已知循环次数使用for循环,如果不清楚循环多少次建议使用while循环
3、for循环中,控制循环的变量只在循环中可以使用。While循环中,控制循环的变量在循环后还可以使用

死循环

一直循环的执行下去,如果没有干预不会停下来

for(;;){
	System.out.println("Hello World");
}

//经典做法
while(true){
	System.out.println("Hello World");
}

do{
	System.out.println("Hello World");
}while (true);
eg:
public static void main(String[] args) {
        //1、定义正确的密码
        int okPassword = 520;
        //2、定义一个死循环让用户不断的输入密码验证
        Scanner sc = new Scanner(System.in);
        while(true){
            System.out.println("请您输入正确的密码: ");
            int password = sc.nextInt();
            //3、使用if判断密码是否正确
            if (password == okPassword){
                System.out.println("登录成功了~~~~");
                break;//可以立即结束当前所在循环的执行的
            }else {
                System.out.println("密码错误! ");
            }
        }
    }
循环嵌套

循环中又包含循环

for(int i = 0; i < 3; i++){
	for (int j = 0; j < 5; j++){
		System.out.println("我爱你");
	}
}
		//理解嵌套循环的执行流程
        //场景:假如你有老婆,然后你犯错了,你老婆罚你说五天,每天三句我爱你
        for(int i = 0; i < 5; i++){
            for (int j = 0; j < 3; j++){
                System.out.println("我爱你");
            }
        }
        /**
         *****
         *****
         *****
         *****
         */
        for (int i = 0; i < 4 ;i++){
            for (int j = 0; j <5; j++){
                System.out.print("*");
            }
            System.out.println();//换行
        }

特点:外部循环每循环一次,内部循环全部执行完一次

跳转关键字

break

跳出并结束当前所在循环的执行

continue

用于跳出当前循环的当次执行,进入下一次循环

注意事项

break:只能用于结束所在循环,或者结束所在switch分支的执行
continue:只能在循环中进行使用

public static void main(String[] args) {
        //理解break和continue的使用
        //场景:假如你又有老婆了,然后你犯错了,你老婆罚你做5家务,每天都是洗碗,但是到第3天心软了原谅你了不用洗了
        for (int i = 0; i <5; i++){
            System.out.println("苦逼的洗碗");
            if (i == 2){
                break;//跳出并结束当前循环的执行
            }
        }
        System.out.println("------------");
        //continue 跳出当前循环的当次执行,进入循环的下一次
        //场景:假如你又有老婆了,然后你犯错了,你老婆罚你做5家务
        // 每天都是洗碗,但是到第3天心软了原谅你了不用洗了,但是依旧不解恨,继续洗第4天,第5天
        for (int i = 1; i <= 5 ; i++){
            if (i == 3){
                continue;//立即跳出当前执行,进入循环的下一次!
            }
            System.out.println("苦逼的洗碗: "+i);
        }
    }

案例技术

随机数Random类

Random随机数技术
作用:用于在程序中获取随机数的技术
使用步骤:
1、导包:告诉程序去JDK中哪个包找随机数技术
import java.util.Random;
2、写一行代码代表得到随机数对象
Random r = new Random();
3、调用随机数的功能获取0-9的随机数
int number = r.nextInt(10);
注意:nextInt(n)功能只能生成:0至(n-1)之间的随机数,不包含n。

public static void main(String[] args) {
        Random r = new Random();
        for (int i = 0;i < 10; i++) {
            int data  = r.nextInt(10);//0-9不包含10的(包前不包后)
            System.out.println(data);
        }
        System.out.println("-------------");
        //生成3-17之间的随机数(可以取到17) ==> -3 ==>(0-14) + 3
        int data1 = r.nextInt(15)+3;
        System.out.println(data1);
    }

在这里插入图片描述

public static void main(String[] args) {
        //1、随机一个幸运号码 1-100 之间 (0-99)+1
        Random r = new Random();
        int lucky = r.nextInt(100)+1;
        //使用一个死循环让用户不断去猜测,并给出提示
        Scanner sc = new Scanner(System.in);
        while (true){
            //让用户输入数据猜测
            System.out.println("请您输入猜测的数据(0-100): ");
            int guess = sc.nextInt();

            //判断猜测的号码与幸运号码的大小情况
            if (guess > lucky){
                System.out.println("您猜测的数据过大~~~~");
            }else if (guess < lucky){
                System.out.println("您猜测的数据过小~~~~");
            }else{
                System.out.println("恭喜你,猜中了,可以去买单了~~~~~");
                break;//直接跳出并结束当前死循环!!
            }
        }
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Langfeiluo

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

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

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

打赏作者

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

抵扣说明:

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

余额充值