深入理解循环控制语句 - for

news2025/3/16 10:08:01

循环就是重复的意思,它是编程中的基石,它使程序能够重复执行某段代码,直至满足特定条件为止。

在Java中,for循环是一种常用的循环结构,它以紧凑的形式实现了迭代过程。

一、for循环基础

1.1 for循环简介

for循环在Java中用于控制代码块重复执行固定次数。它由4个部分组成:

  • ①初始化语句,循环开始前执行一次,通常用于设置循环计数器的初始值
  • ②条件判断语句,循环开始后,每次循环前执行,如果结果为true,则执行循环体;否则,循环结束。
  • ③条件控制语句,循环开始后,每次循环后执行,通常用于改变循环计数器的值
  • ④循环体语句,循环开始后,每次循环执行
    在这里插入图片描述
for (初始化语句; 条件判断; 条件控制语句) {
    // 循环体,需要重复执行的代码
}

在这里插入图片描述

1.2 循环的流程

  • ①开始循环,执行初始化语句,初始化语句可以缺省
  • ②执行条件判断语句,结果为true,执行本次循环;为false,终止循环。条件判断语句可以缺省,此时会无限循环。
  • ③执行循环体语句,循环体语句为空的循环称为空循环
  • ④执行条件控制语句,条件控制语句可以缺省
  • ⑤跳转到第②步

在这里插入图片描述

1.3 循环的分类

根据条件判断语句是否恒为true,将循环分为两类:

  • 有限循环,循环的次数有限,条件判断语句为false时,终止循环
  • 无限循环,循环的次数无限,循环不会终止。在实际开发中,常使用这个技巧实现进程、线程常驻

二、break和continue

1,循环终止

循环终止分为两种情况:

  • ①自动终止,条件判断语句为false时,循环自动终止。如下循环,执行5次后,自动终止。
      for(int i = 1;   i <= 5;    i++) {
            System.out.println(i);
      }
  • ②主动终止,执行到循环体中break语句时,循环终止。如下循环,当i=2时,会在执行break后终止循环:
       for(int i = 1;   i <= 5;    i++) {
            if(i == 2) {
                break;// 终止循环
            }
            System.out.println(i);
        }

2,continue

在Java中,continue语句用于跳过当前循环体中剩余的部分,直接开始下一次循环的迭代。

它通常用于在满足某个特定条件时,忽略循环体中剩余的代码,直接检查循环条件以决定是否继续执行下一轮循环。

这对于需要在循环内部基于条件跳过某些不必要的处理步骤时非常有用。

基本语法

for (初始化; 条件; 更新) {
    if (条件满足) {
        continue; // 跳过当前循环体的剩余部分
    }
    // 循环体的其余部分
}

示例

假设我们想要打印1到10之间的所有偶数,可以使用continue语句来跳过奇数:

public class PrintEvenNumbers {
    public static void main(String[] args) {
        for (int i = 1; i <= 10; i++) {
            if (i % 2 != 0) { // 如果i是奇数
                continue; // 跳过奇数,直接进行下一次循环
            }
            System.out.println(i); // 只打印偶数
        }
    }
}

在这个例子中,当i是奇数时,if条件满足,执行continue语句,跳过了打印语句,直接进行下一次循环迭代,因此程序只打印出1到10之间的偶数。

注意事项

  • continue只能在循环体内使用,如果在非循环结构中出现会编译错误。
  • 使用continue时,要小心处理循环变量的更新逻辑,避免无意中创建无限循环。
  • 过度使用continue可能会使代码逻辑变得难以理解和维护,应当在确实需要时才使用。

三,典型用法

1. 计算指定范围内数字的和

需求描述:编写一个Java程序,计算从1到100(包括1和100)所有整数的和。

代码实现

public class SumOfNumbers {
    public static void main(String[] args) {
        int sum = 0;
        for (int i = 1; i <= 100; i++) {
            sum += i;
        }
        System.out.println("从1到100所有整数的和为:" + sum);
    }
}

2. 打印九九乘法表

需求描述:创建一个Java应用程序,打印出标准的9x9乘法表。

代码实现

public class MultiplicationTable {
    public static void main(String[] args) {
        for (int i = 1; i <= 9; i++) {
            for (int j = 1; j <= i; j++) {
                System.out.print(j + "x" + i + "=" + (i * j) + "\t");
            }
            System.out.println(); // 换行
        }
    }
}

3. 查找数组中的最大值

需求描述:给定一个整数数组,使用Java编程找出并打印出数组中的最大值。

代码实现

public class FindMaxValue {
    public static void main(String[] args) {
        int[] numbers = {34, 56, 89, 23, 12, 67, 78, 45};
        int max = numbers[0];
        
        for (int i = 1; i < numbers.length; i++) {
            if (numbers[i] > max) {
                max = numbers[i];
            }
        }
        
        System.out.println("数组中的最大值为:" + max);
    }
}

4. 字符串反转

需求描述:编写一个Java程序,接收用户输入的字符串,并输出该字符串的反转形式。

代码实现

import java.util.Scanner;

public class ReverseString {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入一个字符串:");
        String input = scanner.nextLine();
        String reversed = "";
        
        for (int i = input.length() - 1; i >= 0; i--) {
            reversed += input.charAt(i);
        }
        
        System.out.println("反转后的字符串为:" + reversed);
    }
}

5. 素数判断

需求描述:设计一个Java程序,判断用户输入的数字是否为素数(质数)。

代码实现

import java.util.Scanner;

public class PrimeNumberCheck {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入一个正整数:");
        int number = scanner.nextInt();
        boolean isPrime = true;
        
        if (number <= 1) {
            isPrime = false;
        } else {
            for (int i = 2; i <= Math.sqrt(number); i++) {
                if (number % i == 0) {
                    isPrime = false;
                    break;
                }
            }
        }
        
        if (isPrime) {
            System.out.println(number + " 是素数。");
        } else {
            System.out.println(number + " 不是素数。");
        }
    }
}

四、最佳实践与注意事项

4.1 避免意外的无限循环

确保循环有一个明确的终止条件,防止形成无限循环,消耗系统资源。

4.2 适时使用break和continue

  • break:用于立即跳出循环,结束整个循环过程。
  • continue:跳过当前循环的剩余部分,直接开始下一轮循环。

4.3 代码清晰与可读性

  • 尽量保持循环体的简洁,避免过深的嵌套。
  • 适时注释,解释循环的目的和逻辑,提高代码的可读性。

4.4 性能考量

  • 在循环中尽量减少对外部资源的访问,如数据库查询,以减少性能开销。
  • 考虑循环变量的数据类型和范围,选择合适的数据类型可以提高效率。

五、总结

for循环是Java编程中处理重复任务的强大工具,通过灵活运用其基本形式、增强形式及特殊变体,可以解决各种循环需求。

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

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

相关文章

C++容器之无序多集(std::unordered_multiset)

目录 1 概述2 使用实例3 接口使用3.1 construct3.2 assigns3.3 iterators3.4 capacity3.5 find3.6 count3.7 equal_range3.8 emplace3.9 emplace_hint3.10 insert3.11 erase3.12 clear3.13 swap3.14 bucket_count3.15 max_bucket_count3.16 bucket_size3.17 bucket3.18 load_fa…

00.OpenLayers快速开始

00OpenLayers快速开始 官方文档&#xff1a; 快速开始&#xff1a;https://openlayers.org/doc/quickstart.html 需要node环境 一、设置新项目 npm create ol-app my-app cd my-app npm start第一个命令将创建一个名为 my-app​ 的目录&#xff08;如果您愿意&#xff0c;…

【话题】我眼神的IT行业现状与未来趋势

目录 一、挑战 教学资源的重新分配 教师角色的转变 学生学习方式的改变 教育评价体系的挑战 二、机遇 个性化学习 跨学科学习 国际合作与交流 创新教育模式 三、如何培养下一代IT专业人才 更新教育理念 加强基础设施建设 整合课程资源 加强实践教学 培养跨学科…

Golang并发编程-协程goroutine任务取消(Context)

文章目录 前言一、单个任务的取消二、 所有任务取消三、Context的出现Context的定义Context使用 总结 前言 在实际的业务种&#xff0c;我们可能会有这么一种场景&#xff1a;需要我们主动的通知某一个goroutine结束。比如我们开启一个后台goroutine一直做事情&#xff0c;比如…

浅谈C++函数

目录 一、函数的概念二、调用函数的两个前提三、函数传参的三种形式四、函数返回类型 一、函数的概念 函数是C程序的基本模块&#xff0c;通常一个C程序由一个或多个函数组成。函数可以完成用户指定的任务&#xff0c;一般分为库函数和用户自定义的函数。函数由函数头和函数体…

AIGC-常见图像质量评估MSE、PSNR、SSIM、LPIPS、FID、CSFD,余弦相似度----理论+代码

持续更新和补充中…多多交流&#xff01; 参考: 图像评价指标PNSR和SSIM 函数 structural_similarity 图片相似度计算方法总结 MSE和PSNR MSE: M S E 1 m n ∑ i 0 m − 1 ∑ j 0 n − 1 [ I ( i , j ) − K ( i , j ) ] 2 MSE\frac{1}{mn}\sum_{i0}^{m-1}\sum_{j0}^{n-1}[…

重学java 43.多线程 多等待多唤醒案例

Fear never builds the future,but hope does. —— 24.5.25 多等待多唤醒问题 在多条线程同时消费同时等待时&#xff0c;会出现问题 BaoZiPu package S77ThreadMoreWait;/*count和flag可以定义成包装类&#xff0c;但要记得给count和flag手动赋值不然对于本案例来说&#xff…

C# MemoryStream流的详解与示例

文章目录 1. MemoryStream的基本介绍2. 创建MemoryStream对象无参构造函数带参构造函数 3. 向MemoryStream中写入数据写入字节数组写入字符串 4. 从MemoryStream中读取数据读取字节数组读取字符串 5. MemoryStream的实用辅助方法获取长度设置长度定位 6. 示例代码 在C#中&#…

JWT使用方法

目录 基础概念 依赖 生成令牌 工具类 控制层 解析令牌 工具类 网关过滤器 效果 基础概念 Json web token (JWT), 是为了在网络应用环境间传递声明而执行的一种基于JSON的开放标准&#xff08;(RFC 7519).该token被设计为紧凑且安全的&#xff0c;特别适用于分布式站点…

局域网桌面监控软件哪个好用?良心推荐

如何有效地监控和管理内部员工的计算机使用行为&#xff0c;防范潜在的安全风险&#xff0c;提高工作效率&#xff0c;是众多企业管理者关注的焦点。 而一款优秀的局域网桌面监控软件无疑能为企业的IT治理提供有力支撑。 小编在此给大家推荐一款好用的局域网桌面监控软件——域…

stm32H743不要将主频设置到480MHz

0 问题描述 本文使用的stm32H743是V版本&#xff0c;支持最高480MHz的主频。但在将主频设置为480MHz之后&#xff0c;使用FDCAN的回环模式出现了各种接收不到的异常问题。经过一番排查&#xff0c;将主频修改到400MHz&#xff0c;同时降低芯片内部LDO输出电压后恢复了正常。 …

深入理解NumPy与Pandas【numpy模块及Pandas模型使用】

二、numpy模块及Pandas模型使用 numpy模块 1.ndarray的创建 import numpy as np anp.array([1,2,3,4]) bnp.array([[1,2,3,4],[5,6,7,8]]) print(a) #[1 2 3 4] print(b) #[[1 2 3 4][5 6 7 8]] 1.1使用array()函数创建 numpy.array(object, dtype None, copy True, ord…

域内攻击 ----->约束非约束委派攻击

在域中&#xff0c;除了我们常见的横向移动以外&#xff0c;还有很多攻击&#xff0c;像什么kerberoasting&#xff0c;委派攻击&#xff0c;NTLMrelay啊...... 还有很多&#xff08;暂时只知道这些&#xff09; 以前在一篇公众号看到的一个笑话也荟萃了网安的一些攻击手法&am…

设计模式在芯片验证中的应用——单例

一、单例模式 单例模式(Singleton)是一种创建型设计模式&#xff0c;能够保证一个类只有一个实例&#xff0c; 并提供一个访问该实例的全局节点。验证环境配置(configuration)类、超时(timeout)处理类等可以使用单例实现。比如说验证环境需要在特定场景中监测特定接口上的超时事…

【机器学习300问】97、机器学习中哪些是凸优化问题,哪些是非凸优化问题?

在机器学习的领域中&#xff0c;多数模型的参数估计问题实质上可以转化为优化问题。鉴于机器学习模型的多样性&#xff0c;不同的模型会对应着不同的损失函数&#xff0c;进而形成各具特色的优化问题。了解优化问题的形式和特点&#xff0c;对于提升我们求解模型参数的效率和准…

在 Visual Studio 2022 (VS2022) 中删除 Git 分支的步骤如下

git branch -r PS \MauiApp1> git push origin --delete “20240523备份” git push origin --delete “20240523备份”

推荐五个线上兼职,在家也能轻松日入百元,适合上班族和全职宝妈

在这个瞬息万变的时代&#xff0c;你是否也曾考虑过在繁忙的工作之外&#xff0c;寻找一份兼职副业来补贴家用&#xff0c;同时保持生活的多样性&#xff1f;别急&#xff0c;现在就让我为你揭秘五个可靠的日结线上兼职岗位&#xff0c;助你轻松迈向财务自由之路&#xff01; 一…

地质考察AR远程交互展示系统辅助老师日常授课

广东这片充满活力的土地&#xff0c;孕育了一家引领ARVR科技潮流的杰出企业——深圳华锐视点&#xff0c;作为一家专注于VR/AR技术研究与业务开发的先锋公司。多年来&#xff0c;我们不断突破技术壁垒&#xff0c;将AR增强现实技术与各行各业的实际需求完美结合&#xff0c;助力…

基于分块贝叶斯非局部均值优化(OBNLM)的图像去噪算法matlab仿真

目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.本算法原理 4.1 块定义与相似度计算 ​4.2 贝叶斯框架下的加权融合 4.3 加权最小均方误差估计 5.完整程序 1.程序功能描述 基于分块贝叶斯非局部均值优化(OBNLM)的图像去噪算法matlab仿真&#xff0c…

JAVA线程池的线程数量配置

一 JAVA线程池的线程数量配置 关于线程的配置&#xff0c;线程数量配置多少这个问题呢&#xff1f;往往不同的环境与不同的线程中的代码决定其配置的线程的数量。 二 常见的线程量配置 最常见的方式根据线程中处理的代码划分为CPU密集型或IO密集型&#xff1a; CPU密集型&…