Java程序设计的基本结构 - 循环结构

简介: Java程序设计的基本结构 - 循环结构

一、循环的基本结构

为了讲解方便,我们可以将循环结构划分为四个部分来进行描述。当然,这四个部分并不是都要出现,甚至在都不出现时也可以构成一个循环结构。并且,对于不同的循环结构,每个部分的相对位置也不同。

1. 初始化部分

在进入循环结构之前可以定义一些循环中以及循环结束后都要用到的变量,进行赋值。

2. 判断条件部分

用于决定是否继续进行循环,如果为假,则循环结束。判断部分可以直接使用一个布尔类型的变量,或者使用表达式,但是必须保证表达式的结果为布尔类型。

3. 循环体部分

循环结构的核心部分,用于书写每次想要重复执行的代码,通常要根据程序功能来设计。

4. 迭代部分

用于辅助控制循环的结束,在循环体之后执行,如变量自增等。

与判断结构类似,当不使用大括号时,循环结构只能控制一行代码,通常我们会添加大括号

二、while循环

1. 循环结构

[初始化部分]
while(条件判断部分){
    循环体
    [迭代部分]
}

2. 循环特点

对于while循环,通常用于循环次数不确定时,如:让使用者决定什么时候退出循环。

  • 可以用一个布尔变量直接来决定循环是否继续
  • 可以用break关键字随时跳出循环
  • 当条件判断部分不成立时结束循环
  • 初始化部分和迭代部分可以省略
  • 条件判断部分后如果出现分号会导致结构直接结束

3. 示例程序

  • 循环输出1到9
public static void main(String[] args){
    // 初始化部分
    int i = 1;
    // 括号中为循环继续执行的条件:当i的值小于等于9时
    while(i <= 9){
        // 循环体部分
        System.out.println(i);
        // 迭代部分:辅助控制循环结束或根据循环体的需要来写
        i++;
    }
}
  • 猜字程序
import java.util.Scanner;
import java.util.Random;
public class Test{
    public static void main(String[] args){
        // 初始化Scanner,用于从键盘读入数据
        Scanner sc = new Scanner(System.in);
        // 初始化随机数生成工具
        Random random = new Random();
        // 随机生成一个0~99的整数
        int n = random.nextInt(100);
        // 定义一个布尔类型的变量,用于控制循环的结束
        boolean flag = true; 
        // 使用flag作为控制循环结束的变量       
        while(flag){
            System.out.println("请输入一个数:");
            // 从键盘读取一个数
            int temp = sc.nextInt();
            // 判断输入的数是否与随机数相同,猜中则退出
            if(temp == n){
                System.out.println("猜中了!");
                // 修改flag为false,使得循环退出        
                flag = false;
            }else{
                // 如果没有猜中,就让用户自己决定是不是要继续猜
                System.out.println("猜错了!还要继续吗?1:继续2:退出");
                // 如果输入的数字为2则退出(此处暂不考虑输入出错等其他情况)
                if(sc.nextInt() == 2){
                    // 修改flag为false,使得循环退出        
                    flag = false;
                }
            }
        }
        // 使用后关闭
        sc.close();
    }
}

三、do-while循环

1. 循环结构

[初始化部分]
do{
    循环体
    [迭代部分]
}while(条件判断部分);

2. 循环特点

do-while循环与while循环的用法基本相同,主要的不同点在于循环体(迭代部分)一定会先执行一次,然后再进行判断,这非常适合在初学时做成菜单程序。

  • 可以用一个布尔变量直接来决定循环是否继续
  • 可以用break关键字随时跳出循环
  • 当条件判断部分不成立时结束循环
  • 初始化部分和迭代部分可以省略

3. 示例程序

  • 菜单程序

break只能跳出离自己最近一层的switch-case或循环结构,如果想直接跳出指定层的循环,需要使用到自定义标签。自定义标签的用法比较简单,直接在一个循环结构的起始位置加一个单词,配合冒号使用,在进行跳出时,可以在break后面添加自定义标签的名称,即可跳出指定层的循环。

import java.util.Scanner;
public class Test{
    public static void main(String[] args){
        // 初始化Scanner,用于从键盘读入数据
        Scanner sc = new Scanner(System.in);
        // 在此处使用自定义标签out(名称可以自定义)来进行标记
        out:do{
            System.out.println("****欢迎使用xxx系统****");
            System.out.println("****1.系统功能一*******");
            System.out.println("****2.系统功能二*******");
            System.out.println("****3.退出系统*********");
            System.out.print("请输入功能选项:");
            // 从键盘读入一个数选择要执行的功能
            int select = sc.nextInt();
            switch(select){
                case 1:
                    // 功能一相关代码
                    break;
                case 2:
                    // 功能二相关代码
                    break;
                case 3:
                    // 指定跳出外层的do-while循环,否则只能跳出当前的switch-case结构
                    break out;
            }
        // 判断条件一直为真,除非用户输入选项3退出系统,则使用break跳出。
        }while(true);
        // 使用后关闭
        sc.close();
    }
}

四、for循环

1. 循环结构

for(初始化部分;条件判断部分;迭代部分){
    循环体
}

2. 循环特点

for循环主要用于循环次数确定的情况,通常使用break直接跳出循环是由于已经完成了所需工作,终止剩余无用循环以提高程序运行效率。

  • for循环的一个明显特点在于初始化部分,迭代部分的控制比较方便,可以完全在循环内部完成
  • 初始化部分写在小括号中第一个位置,只会执行一次
  • 如果在初始化部分声明一个新的变量,则该变量只能在循环内部使用
  • 判断条件出现在小括号的中间位置,可以是布尔类型的变量或表达式,也可以直接省略使用break关键字手动跳出
  • 迭代部分通常用于变量的控制,每次循环体结束后执行
  • continue关键字可以用于所有的循环结构,作用是立即结束当前循环(跳过循环体的剩余部分内容,迭代部分依然会执行),进入下一次循环

3. 示例程序

  • 计算整数1~10的加和
public static void main(String[] args){
    // 定义一个整数类型变量,用于记录结果
    int sum = 0;
    for(int i = 1;i <= 10;i++){
        // 根据逻辑,将每次得到的值相加
        sum += i;
    }
    // 输出计算结果
    System.out.println(sum);
}
  • 输出整数0~100范围内的所有偶数
public static void main(String[] args){
    for(int i = 0;i <= 100;i++){
        // 判断当前数字的奇偶性,如果是奇数则跳过输出语句
        if(i % 2 != 0){
            // 如果是奇数,将跳过循环体剩余的部分,迭代部分不受影响
            continue;
        }
        System.out.println(i);
    }
    // 输出计算结果
    System.out.println(sum);
}

五、死循环

死循环的出现是由于我们没有正确的指定循环的终止条件和控制相关的变量,导致判断条件部分一直为真,使得循环结构无法结束。但有些时候根据功能需要我们会手动先构造一个死循环,然后使用break来进行跳出,如:菜单程序,由用户来决定什么时候结束,进行循环的跳出。手动构建一个死循环十分简单,但是如果意外的出现死循环就需要优先检查条件判断部分以及相关变量的变化了。

1. while循环

while(true){
    循环体
}

2. do-while循环

do{
    循环体
}while(true)

3. for循环

// 是的,你没有看错,所有的部分都不需要填写,但是分号不能省略
for(;;){
    循环体
}


目录
相关文章
|
30天前
|
Java 测试技术 开发者
💡Java 零基础:彻底掌握 for 循环,打造高效程序设计
【10月更文挑战第15天】本文收录于「滚雪球学Java」专栏,专业攻坚指数级提升,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收藏&&订阅!持续更新中,up!up!up!!
112 63
|
1月前
|
存储 算法 Java
🚀Java零基础-顺序结构详解 🚀
【10月更文挑战第11天】本文收录于「滚雪球学Java」专栏,专业攻坚指数级提升,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收藏&&订阅!持续更新中,up!up!up!!
35 6
|
1月前
|
小程序 Oracle Java
JVM知识体系学习一:JVM了解基础、java编译后class文件的类结构详解,class分析工具 javap 和 jclasslib 的使用
这篇文章是关于JVM基础知识的介绍,包括JVM的跨平台和跨语言特性、Class文件格式的详细解析,以及如何使用javap和jclasslib工具来分析Class文件。
47 0
JVM知识体系学习一:JVM了解基础、java编译后class文件的类结构详解,class分析工具 javap 和 jclasslib 的使用
|
3月前
|
Java
Java应用结构规范问题之在UnitConvertUtils工具类将千米转换为米的问题如何解决
Java应用结构规范问题之在UnitConvertUtils工具类将千米转换为米的问题如何解决
|
3月前
|
Java 应用服务中间件 HSF
Java应用结构规范问题之配置Logback以仅记录错误级别的日志到一个滚动文件中的问题如何解决
Java应用结构规范问题之配置Logback以仅记录错误级别的日志到一个滚动文件中的问题如何解决
|
3月前
|
Java C语言
|
3月前
|
存储 开发者 C#
WPF与邮件发送:教你如何在Windows Presentation Foundation应用中无缝集成电子邮件功能——从界面设计到代码实现,全面解析邮件发送的每一个细节密武器!
【8月更文挑战第31天】本文探讨了如何在Windows Presentation Foundation(WPF)应用中集成电子邮件发送功能,详细介绍了从创建WPF项目到设计用户界面的全过程,并通过具体示例代码展示了如何使用`System.Net.Mail`命名空间中的`SmtpClient`和`MailMessage`类来实现邮件发送逻辑。文章还强调了安全性和错误处理的重要性,提供了实用的异常捕获代码片段,旨在帮助WPF开发者更好地掌握邮件发送技术,提升应用程序的功能性与用户体验。
68 0
|
Java
Java循环结构的一些总结
Java循环结构的一些总结
261 0
Java循环结构的一些总结
|
8天前
|
Java 开发者
Java多线程编程中的常见误区与最佳实践####
本文深入剖析了Java多线程编程中开发者常遇到的几个典型误区,如对`start()`与`run()`方法的混淆使用、忽视线程安全问题、错误处理未同步的共享变量等,并针对这些问题提出了具体的解决方案和最佳实践。通过实例代码对比,直观展示了正确与错误的实现方式,旨在帮助读者构建更加健壮、高效的多线程应用程序。 ####
|
7天前
|
安全 Java 开发者
Java 多线程并发控制:深入理解与实战应用
《Java多线程并发控制:深入理解与实战应用》一书详细解析了Java多线程编程的核心概念、并发控制技术及其实战技巧,适合Java开发者深入学习和实践参考。
下一篇
无影云桌面