【Java小白图文教程】-04-循环结构

news2024/10/24 20:04:47

 

精品专题:

01.《C语言从不挂科到高绩点》课程详细笔记

https://blog.csdn.net/yueyehuguang/category_12753294.html?spm=1001.2014.3001.5482

02. 《SpringBoot详细教程》课程详细笔记

https://blog.csdn.net/yueyehuguang/category_12789841.html?spm=1001.2014.3001.5482

03.《SpringBoot电脑商城项目》课程详细笔记

https://blog.csdn.net/yueyehuguang/category_12752883.html?spm=1001.2014.3001.5482

04.《VUE3.0 核心教程》课程详细笔记

https://blog.csdn.net/yueyehuguang/category_12769996.html?spm=1001.2014.3001.5482

================================

||     持续分享系列教程,关注一下不迷路 ||

||         视频教程:小破站:墨轩大楼        ||

================================

3. 循环语句

3.1. 循环概述

在java中程序的执行流程,除了顺序结构,分支结构之外,还有另一种非常常见的结构:循环结构;在对于某些需要反复执行的操作执行时,需要使用到循环,对于某些容器(数组,集合)遍历操作时也需要使用到循环,循环在实际的生产开发环境中应用十分广泛;Java中对于循环的支持,包含以下分类:

  • for循环
  • while循环
  • do..while循环
  • 迭代器:forEach
  • 递归(recursion)

有关循环语句的执行流程:

3.2. for循环

for循环是一种经典循环方式,for循环一般常见于循环次数已知的应用场景中,语法规则:

for(初始值;循环条件;步进){
    //循环体
}
for(int i=1;i<=10;i++){
    int n = (int)(Math.random()*10) + 1;
    System.out.println(n);
}

3.3. while循环

除了for之外,java中对与一些循环次数不定的操作也提供了while循环来实现,while循环的执行次数为0次~N次,语法规则:

while(循环条件){
    //循环体
}
int i = 1;
while(i <= 10){
    System.out.println(i);
    i++;
}

3.4. do...while循环

while循环除了传统写法之外,对于一些特殊的需求还提供了另一种使用方式:do..while;doWhile循环至少会执行一次,最多N次;语法:

do{
    //循环体
}while(循环条件)
do{
    System.out.println(i);
    i++;
}while(i<=10);

3.5. 循环练习

1. 求1+2+3+4+...100=? 考虑临时变量(局部变量)

2. 求 5! = 5*4*3*2*1

3. 打印1000以内的所有偶数
//1000以内的所有偶数
for (int i = 0; i <= 1000 ; i+=2) {
    System.out.print(i+" ");
}
System.out.println();
//请输出1000以内5的倍数
for (int i = 0; i <= 1000 ; i+=5) {
    System.out.print(i+" ");
}
4. 求水仙花数(一个三位数,每一位的立方和都是这个数本身:xyz = x*x*x + y*y*y + z*z*z)
for (int i = 100; i < 1000; i++) {
    int a = i % 10; //个位
    int b = i / 10 % 10; //十位
    int c = i / 100; //百位
    if (a * a * a + b * b * b + c * c * c == i) {
        System.out.println("水仙花数:" + i);
    }
}

4. 扩展:系统输入

通常情况下需要输出数据到控制台我们可以使用System.out(标准输出流)完成,控制台除了可以实现系统输出外同时也支持系统输入System.in(标准输入流);JDK中提供了一个类java.util.Scanner可以实现对标准输入流进行扫描以及读取流中的内容,并且Scanner类还可以将不同的数据扫描读取为不同的数据类型。

Scanner常用方法:

  • next():以空格作为标记读取一段文本内容,返回String类型
  • nextInt():以空格作为标记读取一个整数,返回为int类型
  • nextLine():以换行符作为结束标记,读取一行文本内容,返回String类型
//创建文本扫描对象用于从标准输入流中获取信息(引用数据类型)
Scanner sc = new Scanner(System.in);
//从下一个结束标记(空格)之前扫描一段文本信息(阻塞式)
String s = sc.next();
System.out.println("输入的内容是:"+s);

//读取下一个扫描到的内容并识别为int类型,结束标记为空格
int i = sc.nextInt();
System.out.println("输入的整数是:"+i);

sc.nextLine(); //读取一个空行
System.out.println("================");
//以换行作为结束标记
s = sc.nextLine();
System.out.println("输入的一行内容是:"+s);

思考题

模拟地下城与勇士(DNF)的装备强化过程:

提示1:

  • DNF装备强化在+1~+3 不会失败;
  • +4~+7,失败后物品原有强化等级降低1级;
  • +8~+10,失败后掉3级;
  • 10上11或以上失败就爆了。

提示2:

  • DNF装备强化1~3级,成功率100%
  • DNF装备强化3~4级,成功率95%
  • DNF装备强化4~5级,成功率90%
  • DNF装备强化5~6级,成功率80%
  • DNF装备强化6~7级,成功率75%
  • DNF装备强化7~8级,成功率62.1%
  • DNF装备强化8~9级,成功率53.7%
  • DNF装备强化9~10级,成功率41.4%
  • DNF装备强化10~11级,成功率33.9%
  • DNF装备强化11~12级,成功率28%
  • DNF装备强化12~13级,成功率20.7%
  • DNF装备强化13~14级,成功率17.3%
  • DNF装备强化14~15级,成功率13.6%
  • DNF装备强化15~16级,成功率10.1%

实现流程:

要求输入装备的原始等级,输入1执行强化,根据原始等级以及强化的成功率,显示装备的强化结果

public static void add(int initLevel){
//TODO 实现过程
}

5. 死循环

在使用循环过程中,经常会因为忽略一些关键的实现细节导致程序出现死循环(death loop);死循环往往是因为没为循环设置一个结束条件,或者是设置了一个无法达到的结束条件而导致;

例如:

for(int i = 0;i >= 0;i++){
    System.out.println(i);
}

死循环将会导致程序一直执行,消耗大量的内存空间,影响程序的执行性能,尽量要避免死循环的产生。

另外有些时候使用死循环也能满足一些实际的需求:

for(;;){
    Scanner sc = new Scanner(System.in);
    System.out.print("请输入数字:");
    int n = sc.nextInt();
    System.out.println("您输入的是:"+n);
}

以上的死循环使用while一样可以实现

while(true){
    Scanner sc = new Scanner(System.in);
    System.out.print("请输入数字:");
    int n = sc.nextInt();
    System.out.println("您输入的是:"+n);
}

6. 嵌套循环

6.1. 概述

java中除了支持单层的循环之外,另外也支持在循环中嵌套其他循环,实际开发中应尽可能避免循环的嵌套(会导致内存的开销,影响程序性能);但是有些业务中也必须使用嵌套循环来实现具体功能,例如对二维数组的遍历,对多级菜单的遍历等。

嵌套循环的执行流程图:

for(int i = 1;i<10;i++){
    for(int j = 10;j<20;j++){
        System.out.println(i+"----"+j);
    }
}
  • 练习题:输出一个九九乘法口诀表
1*1=1
1*2=2 2*2=4
1*3=3 2*3=6 3*3=9
...

6.2. 嵌套循环练习

  1. 请使用嵌套循环输出以下图形:
*
***
*****
*******
  1. 打印菱形
*
***
*****
*******
*****
***
*
  1. 打印平行四边形
********
********
********
********
********

7. 循环中断

在循环语句正常执行过程中一般没有任何异常情况下,循环会根据结束条件的满足而自然结束,但是某些情况可能需要提前中断循环(不是终止虚拟机);对于这种需求,java中提供了break和continue关键字用于结束(跳过)循环。

例如:输出1000以内,跳过5的倍数输出其他数值。

7.1. continue

continue关键字,在实际使用场景中出现的比较少,一般用在循环内部,用于跳过N次循环中的某一次循环,例如:

for (int i = 0; i < 1000; i++) {
    if(i % 5 == 0){
        //当条件满足时执行continue,跳过本次循环,开始下一次循环
        continue;
    }
    System.out.println(i);
}

以上的运行结果除了5的倍数之外,输出其他的所有小于1000数值

7.2. break

break关键字的使用场景除了在switch语句中用于防止case穿透之外,另外也可以用于循环语句中终止循环,break用在循环中可以结束一层循环。例如:

for (int i = 0; i < 10; i++) {
    for (int j = 10; j < 20; j++) {
        if(j % 6 == 0){
            break;
        }
        System.out.print(i+","+j+" ");
    }
    System.out.println();
}
0,10 0,11 
1,10 1,11 
2,10 2,11 
3,10 3,11 
4,10 4,11 
5,10 5,11 
6,10 6,11 
7,10 7,11 
8,10 8,11 
9,10 9,11

观察以上输出结果,能够直观的发现,当内层循环的变量跟6取余能除尽时,内层循环则直接中断

面试题:continue、break、return关键字的区别?

  • continue主要用于循环语句中,结束一次循环
  • break用于switch语句中防止case穿透;还可以用于循环语句中结束一层循环
  • return用于方法中结束方法,return之后跟随具体的值或者变量用于返回方法的返回值;如果不跟任何内容则表示结束方法

7.3. 循环标记

在某些情况,循环嵌套层次比较多的时候,需要通过break、continue结束(跳过)指定层的循环,可以使用循环标记来完成,循环标记就是为每一个循环语句块添加一个标签,然后在结束时,相关的关键字后面跟上标记就可以实现:

loop1:for (int i = 0; i < 10; i++) {
    loop2:for (int j = 10; j < 20; j++) {
        if(j % 6 == 0){
            break loop1;
        }
        System.out.print(i+","+j+" ");
    }
    System.out.println();
}
System.out.println("程序结束");

以上程序中的loop1和loop2就是循环标签(标签可以自定义:只需要符合标识符的命名规范就可以)

8. 递归(recursion)

8.1. 概述

递归是反复执行代码的另一种方式,区别于传统的循环,原理是在方法层面,对方法自身调用,通过递归可以解决一些循环所解决不了的问题(例如:文件夹的递归遍历,树形菜单的动态展示等),另外使用递归也能解决一些常见的算法问题,例如:斐波拉契数列,汉诺塔等。

递归语法:

修饰符 返回值类型 方法名(){

方法名();

}

在一个方法中对当前方法进行调用即称之为递归:

public void m(){
    system.out.println("方法执行");
    m();
}

注意事项:

如果不为递归方法指定结束条件,则程序将会导致StackOverflowerError出现:

Exception in thread "main" java.lang.StackOverflowError
at com.softeem.day4.recursion.Demo1.sum(Demo1.java:13)
at com.softeem.day4.recursion.Demo1.sum(Demo1.java:13)
at com.softeem.day4.recursion.Demo1.sum(Demo1.java:13)
at com.softeem.day4.recursion.Demo1.sum(Demo1.java:13)
...

8.2. 案例

  • 求1+2+3+4+...+100=?上述问题除了使用传统循环解决之外,使用递归也能轻松实现:
public class Demo1 {

    public static int sum(int n){
        if(n <= 1){
            return 1;
        }else{
            //方法递归调用
            return n + sum(n-1);
        }
    }

    public static void main(String[] args) {
        System.out.println(sum(100)); // 5050
    }
}

原理如下:

  • 求5!
/**
     * 5*4*3*2*1
     *
     * @param n
     * @return
     */
public static int jiecheng(int n) {
if (n == 1) {
    return 1;
} else {
    return jiecheng(n - 1) * n;
}
}

8.3. 思考题

请观察以下的数列,寻找规律

1 1 2 3 5 8 13 21 34 ... n

求n的结果(斐波拉契数列)

public static int fib(int n){
if(n == 1 || n == 2){
    return 1;
}else{
    return fib(n-1) +fib(n - 2);
}
}

练习

  1. 实现汉诺塔(递归实现)

  1. 实现一个动态日历提示:

提示:

1. 平年2月份是28天,闰年2月份是29天;1,3,5,7,8,10,12这几个月是31天,其余的每个月(4,6,9,11)30天

2. 计算从1900年1月到当前月份的上一个月总天数

3. 总天数和7取余之后,余数则为当月前面需要输出的空格(建议使用制表符:tab)数


 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2222667.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

深入理解计算机系统--计算机系统漫游

对于一段最基础代码的文件hello.c&#xff0c;解释程序的运行 #include <stdio.h>int main() {printf ( "Hello, world\n") ;return 0; }1.1、信息就是位上下文 源程序是由值 0 和 1 组成的位&#xff08;比特&#xff09;序列&#xff0c;8 个位被组织成一组…

springboot048校园资料分享平台(论文+源码)_kaic

校园资料分享平台 摘要 随着信息互联网购物的飞速发展&#xff0c;国内放开了自媒体的政策&#xff0c;一般企业都开始开发属于自己内容分发平台的网站。本文介绍了校园资料分享平台的开发全过程。通过分析企业对于校园资料分享平台的需求&#xff0c;创建了一个计算机管理校园…

无人机的电池放电详解!

一、定义与表示方法 无人机的电池放电率是指电池在一定时间内放出其储存电能的能力&#xff0c;这一参数通常用C数来表示。C数越大&#xff0c;表示放电速率越快。 例如&#xff0c;一个2C的电池可以在1/2小时内放完其全部电量&#xff0c;而一个10C的电池则可以在1/10小时内…

喜讯!望繁信科技荣膺2022年中国超自动化先锋企业TOP20

36氪重磅发布「2022中国超自动化先锋企业」调研结果。凭借多年在流程挖掘领域过硬的技术实力和突出的产品创新力&#xff0c;望繁信科技在众多调研样本企业中脱颖而出&#xff0c;赢得了专家评委的充分认可&#xff0c;成功入选2022年中国超自动化先锋企业TOP20。 什么是超自动…

【书生大模型实战营】闯关任务1-入关岛

这里写自定义目录标题 第一关 L0G1000 Linux 基础知识 第一关 L0G1000 Linux 基础知识 SSH连接与端口映射并运行hello_world.py 关键截图&#xff1a;

502 错误码通常出现在什么场景?

服务器过载场景 高流量访问&#xff1a;当网站遇到突发的高流量情况&#xff0c;如热门产品促销活动、新闻热点事件导致网站访问量激增时&#xff0c;服务器可能会因承受过多请求而无法及时响应。例如&#xff0c;电商平台在 “双十一” 等购物节期间&#xff0c;大量用户同时…

Windows解决localhost拒绝了连接请求

最近&#xff0c;在开发前端Vue项目时&#xff0c;Vue项目启动成功&#xff0c;没有任何报错&#xff0c;服务控制台已出现APP访问地址&#xff0c;如下图所示。 览器打开后页面先是空白&#xff0c;然后过了一会儿显示无法访问此网站&#xff0c;localhost拒绝了我们的连接请…

WPF MVVM模式实现DataGrid编辑

本文是一个MVVM模式开发的基础教程&#xff0c;完全手写实现&#xff0c;未借助三方框架&#xff0c;适用于初学者 要实现DataGrid的编辑&#xff0c;步骤如下&#xff1a; 1、创建两个窗口&#xff0c;第一个窗口用于显示DataGrid&#xff0c; 布局如下&#xff1a; 这个界…

Data+AI下的云数仓未来已来!

DataAI下的云数仓未来已来&#xff01; 前言云数仓是什么&#xff1f;云数仓的概念与背景数据孤岛问题与云数仓的优势 现代数仓如何建设&#xff1f;灵活架构与弹性扩展实时与离线处理并存安全与合规性&#xff1a;现代数仓的基石 AI如何助力数仓建设&#xff1f;AI驱动的数据处…

《探索 NESMA:软件度量领域的璀璨之星》

《探索 NESMA&#xff1a;软件度量领域的璀璨之星》 一、NESMA 初印象 NESMA&#xff08;Netherland Software Measurement Association&#xff09;&#xff0c;作为荷兰软件度量协会的简称&#xff0c;在软件规模度量领域占据着重要地位。它是五种 ISO 国际功能点标准之一&am…

C++学习路线(二十二)

构造函数 构造函数作用 在创建一个新的对象时&#xff0c;自动调用的函数&#xff0c;用来进行“初始化”工作:对这个对象内部的数据成员进行初始化。 构造函数特点 1.自动调用(在创建新对象时&#xff0c;自动调用) 2.构造函数的函数名&#xff0c;和类名相同 3.构造函数…

visual studio设置修改文件字符集方法

该方法来自网文&#xff0c;特此记录备忘。 添加两个组件&#xff0c;分别是Force UTF-8,FileEncoding。 截图如下&#xff1a; 方法如下&#xff1a;vs中点击“扩展”->“管理扩展”&#xff0c;输入utf搜索&#xff0c;安装如下两个插件&#xff0c;然后重启vs&#xf…

Cursor零基础小白教程系列 - 创建你的第一个Cursor 项目

最适合小白零基础的Cursor教程 网站lookai.top相同作者&#xff0c;最新文章会在网站更新&#xff0c;欢迎收藏书签 创建你的第一个Cursor 项目 实操视频 概述 开始使用Cursor进行编程的第一步是创建或导入一个项目。本指南将帮助您了解如何在Cursor中创建新项目、导入现有项…

GPB外链:独立站SEO提升的必备利器!

为什么GPB外链这么受欢迎&#xff1f;这主要是因为它能显著提升网站的权威性和可见性。每一条GPB外链都来自高权重的独立域名&#xff0c;并附有一篇与网站主题高度相关的原创文章。这样的外链&#xff0c;不仅对提升网站排名有帮助&#xff0c;还能为你带来更多的精准流量。 与…

Konva框选移动

效果&#xff0c;可以单独点击控制大小&#xff0c;也可框选控制 代码&#xff1a; <template><div class"rect"><div id"canvas"></div> <!-- 画布容器 --></div> </template><script setup lang"ts&…

【JVM】—G1 GC日志详解

G1 GC日志详解 ⭐⭐⭐⭐⭐⭐ Github主页&#x1f449;https://github.com/A-BigTree 笔记链接&#x1f449;https://github.com/A-BigTree/Code_Learning ⭐⭐⭐⭐⭐⭐ 如果可以&#xff0c;麻烦各位看官顺手点个star~&#x1f60a; 文章目录 G1 GC日志详解1 G1 GC周期2 G1日…

老牌Trans也放量灌水中?年刊文量1000+,网友分享3个月可录,0版面费!

【SciencePub学术】今天给大家推荐的是一本计算机领域的SCI—《IEEE TRANSACTIONS ON ELECTRON DEVICES》&#xff0c;IEEE-Trans系列&#xff0c;虽然常年只能位居2区&#xff0c;不过投稿难度相对较低&#xff0c;所以还是深受大家喜爱的。 期刊概况 IF&#xff1a;2.9 分…

【计算机网络 - 基础问题】每日 3 题(五十四)

✍个人博客&#xff1a;https://blog.csdn.net/Newin2020?typeblog &#x1f4e3;专栏地址&#xff1a;http://t.csdnimg.cn/fYaBd &#x1f4da;专栏简介&#xff1a;在这个专栏中&#xff0c;我将会分享 C 面试中常见的面试题给大家~ ❤️如果有收获的话&#xff0c;欢迎点赞…

Spring事务的七种传播行为

Spring事务的七种传播行为 1.事务的传播行为是什么&#xff1f;2.具体传播行为2.1 REQUIRED &#xff0c;默认&#xff0c;存在事务则加入该事务&#xff0c;不存在则新建一个事务2.2 REQUIRES_NEW&#xff0c;每次新开启事务&#xff0c;新老事务相互独立2.3 NESTED&#xff0…

ArcGIS无插件加载(无偏移)在线天地图高清影像与街道地图指南

在地理信息系统&#xff08;GIS&#xff09;的应用中&#xff0c;加载高清影像与街道地图对于地图制图、影像查阅、空间数据分析等工作至关重要。天地图作为官方出品的地图服务&#xff0c;以其标准的数据、较快的影像更新速度等特点受到广泛欢迎。以下是如何在ArcGIS中无插件加…