最新Java基础系列课程--Day03-Java程序流程控制(三)

简介: 最新Java基础系列课程--Day03-Java程序流程控制

最新Java基础系列课程--Day03-Java程序流程控制(二)https://developer.aliyun.com/article/1423481


下面我们把三种循环的区别给同学们总结一下

1. for循环 和 while循环(先判断后执行); 
   do...while (先执行后判断)
2.for循环和while循环的执行流程是一模一样的,
  功能上无区别,for能做的while也能做,反之亦然。
  如果已知循环次数建议使用for循环,如果不清楚要循环多少次建议使用while循环。
3 for循环中控制循环的变量只在循环中使用
  while循环中,控制循环的变量在循环后还可以继续使用

3.6 死循环

同学们在写代码时,可能一不小心把代码写成了死循环,所谓死循环就是停不下来的循环。

接下来,带着同学们认识几种死循环的写法。然后再说一下死循环有什么用。

//for死循环
for ( ; ; ){
    System.out.println("Hello World1");
}
//while死循环
while (true) {
    System.out.println("Hello World2");
}
//do-while死循环
do {
    System.out.println("Hello World3");
}while (true);

死循环有什么应用场景呢?

最典型的是可以用死循环来做服务器程序, 比如百度的服务器程序就是一直在执行的,你随时都可以通过浏览器去访问百度。如果哪一天百度的服务器停止了运行,有就意味着所有的人都永不了百度提供的服务了。

对于这样的应用我们目前了解一下就可以了。对于目前来说我们只要知道代码格式该怎么写,能达到什么效果就行。

3.7 循环嵌套

各位同学,接下来我们学习一种在实际工作中很常用的循环形式——循环嵌套。

所谓循环嵌套,就是一个循环中又包含另一个循环(就是同学们常说的,套娃_),下面我们通过案例代码演示一下。

循环嵌套执行流程:外部循环每循环一次,内部循环会全部执行完一轮。

i=0时; i<3为true; 进入循环
  //j的取值从0到5,执行一轮,打印5次"我爱你"
  for(int j = 1; j <= 5; j++) {
       System.out.println("我爱你:" + i);
    }
    内层循环执行完之后,执行外层的i++; i的值1
i=1时:i<3为true; 进入循环
  //j的取值从0到5,又执行一轮,打印5次"我爱你"
  for(int j = 1; j <= 5; j++) {
       System.out.println("我爱你:" + i);
    }
    内层循环执行完之后,执行外层的i++; i的值2
i=2时:i<3为true; 进入循环
  //j的取值从0到5,再执行一轮,打印5次"我爱你"
  for(int j = 1; j <= 5; j++) {
       System.out.println("我爱你:" + i);
    }
    内层循环执行完之后,执行外层的i++; i的值3
i=3时:i<3为false; 外层循环结束

理解问循环嵌套的执行流程之后,我们再写一个案例来巩固一下

需求:在控制台使用 * 打印出4行5列的矩形
    ****
    ****
    ****
    ****
//1)先写一个循环用来在一行中打印5个"*"
for (int j = 1; j <= 5; j++) {
    System.out.print("*"); // 不换行
}
System.out.println(); //换行
System.out.println("-----------------");
//2)再将第一步的代码套一层循环,执行4次,就可以打印4行
for (int i = 1; i <= 4; i++) {
    for (int j = 1; j <= 5; j++) {
        System.out.print("*"); // 不换行
    }
    System.out.println(); //换行
}

总结一下,对于嵌套循环重点理解这句话:外部循环每循环一次,内部循环会全部执行完一轮。

3.9 跳转语句 break 、continue

前面我们学习了循环结构,在中间我们还接触了死循环的一些形式,那么我想要在循环过程中提前跳出循环怎么做呢?

这里就需要用到跳转语句,需要用到breakcontinue两个关键字。我们先来认识一下这两个关键字的作用

  • break作用:跳出并结束当前所在循环的执行
  • continue作用:结束本次循环,进入下一次循环

案例1:演示break的使用,提前终止循环的执行

// 1、break:跳出并结束当前所在循环的执行。
// 场景:假如你又有老婆了,你犯错了,你老婆罚你说:5句我爱你
// 说到第三句的时候心软了,让你别再说了。
for (int i = 1; i <= 5; i++) {
    System.out.println("我爱你:" + i);
    if(i == 3){
        // 说明已经说完了第三句了,心软了。
        break; // 跳出并结束当前所在循环的执行。
    }
}

案例2:演示continue的使用,结束循环中的一次,继续下一次循环

// 2、continue:跳出当前循环的当次执行,直接进入循环的下一次执行。
// 场景: 假如你有老婆,你犯错了,你老婆罚你洗碗5天。
// 第三天的时候,你表现很好,第三天不用洗碗,但是不解恨,第四天还是要继续的。
for (int i = 1; i <= 5; i++) {
    if(i == 3) {
        // 已经到了第三天,第三天不用洗的。
        continue;
    }
    System.out.println("洗碗:" + i);
}

需要注意的是break和continue不是任何地方都可以使用的

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-S1NWDe9m-1689742908668)(assets/1661146324812.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-EaCki4Hv-1689742908670)(assets/1661146405314.png)]


3.9 循环结构总结

到这里关于循环结构的所有内容就都已经学习完了,我们再把几种循环结构在什么场景下使用,再总结一下。

1. 什么是流程控制
  答:流程控制是用来控制程序的执行顺序的
2. 分支结构if和switch,如何选择?
  答:if分支:一般用于对一个范围进行判断
    switch分支:对一个一个值进行匹配
3. for循环和while循环、do-while如何循环
  答:知道循环次数用for、不知道循环次数用while
     想要先执行,再判断,用do-while

四、递归

递归(recursion)所谓递归方法就是直接或间接调用自身的方法。

要终止一个递归方法,问题最后必须达到一个终止条件。当问题达到终止条件时就会将结果返回给调用者。然后调用者进行计算并将结果返回给它自己的调用者。这个过程持续进行,直到结果传回给原始的调用者为止。

示例:阶乘 输入一个非负整数,求出此数的阶乘。

import java.util.Scanner;
public class App01{
  public static void main(String[] args){
    Scanner inp=new Scanner(System.in);
    System.out.print("请输入一个非负整数:");
    int n=inp.nextInt();
    System.out.print(n+"!="+factor(n));
  }
  //此为定义的一个方法,后面会讲,主要是以此来理解递归调用算法
  public static long factor(int n){
    if(n==0)
      return 1;
    else
      return n*factor(n-1);  //自己调用自己
  }
}

五、练习:生成随机数

各位同学,接下来我们再学习一个新的知识——生成随机数。

生成随机数其实在很多场景下都很实用,比如,在课堂上可以写一个随机点名器点同学起来回答问题;再比如公司年会可以随机抽奖等。

5.1 如何产生一个随机数

生成随机数的功能,其实 Java已经给我们提供了,在JDK中提供了一个类叫做Random,我们只需要调用Random这个类提供的功能就可以了。

// 目标:掌握使用Random生成随机数的步骤。
// 1、导包。import java.util.Random; (idea会自动完成)
import java.util.Random;
public class RandomDemo1 {
    public static void main(String[] args) {
        // 2、创建一个Random对象,用于生成随机数。
        Random r = new Random();
        // 3、调用Random提供的功能:nextInt得到随机数。
        for (int i = 1; i <= 20; i++) {
            int data = r.nextInt(10); // 0 - 9
            System.out.println(data);
        }
    }
}

5.2 猜数字小游戏

各位同学,接下来我们通过一个案例把前面的流程控制、跳转语句、随机数综合运用一下;

如果能把这个案例写出来,说明你对今天的知识点掌握得挺好了。

需求:
  随机生成一个1-100之间的数据,提示用户猜测,猜大提示过大,猜小提示过小,直到猜中    结束游戏
分析:
  1.先随机生成一个1-100之间的数据。
    谁可以帮你生成随机数啊? 是不是要用到Random?
  2.定义一个死循环让用户可以一直猜测。
    用户猜的数据从哪里来啊? 是不是要用到Scanner?
  3.在死循环里,每次让用户录入的数据和随机数进行比较
    如果比随机数大:提示猜大了
    如果比随机数小:提示猜小了
    如果和随机数相同:提示恭喜你猜中了
import java.util.Random;
import java.util.Scanner;
public class RandomTest2 {
    public static void main(String[] args) {
        // 1、随机产生一个1-100之间的数据,做为中奖号码。
        Random r = new Random();
        int luckNumber = r.nextInt(100) + 1;
        // 2、定义一个死循环,让用户不断的猜测数据
        Scanner sc = new Scanner(System.in);
        while (true) {
            // 提示用户猜测
            System.out.println("请您输入您猜测的数据:");
            int guessNumber = sc.nextInt();
            // 3、判断用户猜测的数字与幸运号码的大小情况
            if(guessNumber > luckNumber){
                System.out.println("您猜测的数字过大~~");
            }else if(guessNumber < luckNumber){
                System.out.println("您猜测的数字过小~~");
            }else {
                System.out.println("恭喜您,猜测成功了,可以买单了~~");
                break; // 结束死循环
            }
        }
    }
}


相关文章
|
26天前
|
前端开发 Java API
2025 年 Java 全栈从环境搭建到项目上线实操全流程指南:Java 全栈最新实操指南(2025 版)
本指南涵盖2025年Java全栈开发核心技术,从JDK 21环境搭建、Spring Boot 3.3实战、React前端集成到Docker容器化部署,结合最新特性与实操流程,助力构建高效企业级应用。
354 1
|
1月前
|
消息中间件 Java Kafka
Java 事件驱动架构设计实战与 Kafka 生态系统组件实操全流程指南
本指南详解Java事件驱动架构与Kafka生态实操,涵盖环境搭建、事件模型定义、生产者与消费者实现、事件测试及高级特性,助你快速构建高可扩展分布式系统。
137 7
|
1月前
|
消息中间件 Java 数据库
Java 基于 DDD 分层架构实战从基础到精通最新实操全流程指南
本文详解基于Java的领域驱动设计(DDD)分层架构实战,结合Spring Boot 3.x、Spring Data JPA 3.x等最新技术栈,通过电商订单系统案例展示如何构建清晰、可维护的微服务架构。内容涵盖项目结构设计、各层实现细节及关键技术点,助力开发者掌握DDD在复杂业务系统中的应用。
271 0
|
3月前
|
自然语言处理 前端开发 Java
JBoltAI 框架完整实操案例 在 Java 生态中快速构建大模型应用全流程实战指南
本案例基于JBoltAI框架,展示如何快速构建Java生态中的大模型应用——智能客服系统。系统面向电商平台,具备自动回答常见问题、意图识别、多轮对话理解及复杂问题转接人工等功能。采用Spring Boot+JBoltAI架构,集成向量数据库与大模型(如文心一言或通义千问)。内容涵盖需求分析、环境搭建、代码实现(知识库管理、核心服务、REST API)、前端界面开发及部署测试全流程,助你高效掌握大模型应用开发。
358 5
|
1月前
|
JavaScript Java 微服务
现代化 Java Web 在线商城项目技术方案与实战开发流程及核心功能实现详解
本项目基于Spring Boot 3与Vue 3构建现代化在线商城系统,采用微服务架构,整合Spring Cloud、Redis、MySQL等技术,涵盖用户认证、商品管理、购物车功能,并支持Docker容器化部署与Kubernetes编排。提供完整CI/CD流程,助力高效开发与扩展。
277 63
|
1月前
|
JavaScript 安全 前端开发
Java开发:最新技术驱动的病人挂号系统实操指南与全流程操作技巧汇总
本文介绍基于Spring Boot 3.x、Vue 3等最新技术构建现代化病人挂号系统,涵盖技术选型、核心功能实现与部署方案,助力开发者快速搭建高效、安全的医疗挂号平台。
123 3
|
6月前
|
Java 开发者
重学Java基础篇—Java类加载顺序深度解析
本文全面解析Java类的生命周期与加载顺序,涵盖从加载到卸载的七个阶段,并深入探讨初始化阶段的执行规则。通过单类、继承体系的实例分析,明确静态与实例初始化的顺序。同时,列举六种触发初始化的场景及特殊场景处理(如接口初始化)。提供类加载完整流程图与记忆口诀,助于理解复杂初始化逻辑。此外,针对空指针异常等问题提出排查方案,并给出最佳实践建议,帮助开发者优化程序设计、定位BUG及理解框架机制。最后扩展讲解类加载器层次与双亲委派机制,为深入研究奠定基础。
223 0
|
2月前
|
人工智能 Cloud Native Java
Java 技术栈企业级应用开发全流程
本指南通过构建企业级电商系统,全面解析现代化Java技术栈实战应用。涵盖Spring Boot 3、微服务架构、云原生部署、服务治理、监控可观测性及AI集成,助开发者掌握全流程开发技能,打造高效可扩展的企业级应用。
180 0
Java 技术栈企业级应用开发全流程
|
1月前
|
Java 编译器
Java 17 Switch表达式:更简洁、更强大的流程控制
Java 17 Switch表达式:更简洁、更强大的流程控制
|
2月前
|
安全 Java 数据库
使用Java实现用户的注册和登录流程
以上提供了用户注册和登录的基本框架和必要的说明。在具体的应用场景中,可能还需结合框架特性如Spring Security等提供的高级特性来实现更为完备和安全的用户认证机制。在开发期间,务必注重代码的安全性、清晰性和可维护性,为用户资料保驾护航。
151 13

热门文章

最新文章