Java基础教程

第一章: 开启Java学习之旅

第二章: 掌握计算机基础知识

第三章: 掌握命令行基础知识

第四章: 我的第一个Java程序

第五章: Java编程必备基础

第六章: Java编程的核心:控制结构

第七章: Java面向对象基础

第八章: Java面向对象进阶

第九章: Java字符串类型

第十章: Java数组与数据结构

第十一章: Java高级数据结构

第十二章: Java并发编程基础

首页 > Java基础教程 > 第六章: Java编程的核心:控制结构 > 6.2节: 循环控制结构

6.2节: 循环控制结构

薯条老师 2021-11-19 11:32:15 190364 0

编辑 收藏

广州番禺Python, Java小班周末班培训

第四期线下Java, Python小班周末班已经开课了,培训的课程有Python爬虫,Python后端开发,Python办公自动化,Python大数据分析, Java中高级工程师培训。授课详情请点击:http://chipscoco.com/?cate=6    

6.2.1 理解循环控制

理解循环控制,首先得理解什么是循环。以下内容引自汉语词典:

循环意指往复回旋,指事物周而复始地运动或变化,或反复地连续做某事

那么,放到编程语言中进行类比,则很容易理解循环控制:通过某些指令来控制程序反复地执行。通过控制程序指令反复地执行,可以将程序员从繁琐的代码编写工作中解放出来。同学们先思考下面这个问题:

计算1到10之间的所有自然数的和

乍看是一个很简单的问题,要解决这个问题,只需将1到10之间的所有自然数罗列出来,然后再直接相加即可:

int sum = 1+2+3+4+5+6+7+8+9+10;

但如果把问题改成“计算1到100000之间的所有自然数的和”,该怎么编写程序代码?通过手写的方式,逐数字的进行相加是非常低效的。对于这类问题,编程语言中的循环控制可以提供完美解决方案。

6.2.2 for循环结构

在Java中通过for与while关键字来定义循环结构。

(1) for循环语法结构

for (initial_expression; condition_expression; state_expression){  
  ;
}

initial_expression表示初始表达式,常见的操作是定义一个赋值表达式,condition表达式表示条件表达式,只要条件成立,循环就会一直执行。state_expression表示状态表达式,不断更新变量的状态,直到不满足条件表达式的条件,就会退出循环。for循环结构{}里面的为循环体。现在来看一个简单的例子,计算1到10之间的所有整数的和:

public class HelloJava{
    public  static void main(String[] args) {
        // 定义变量sum来保存1到10之间的所有整数的和
        int sum = 0;
        /*
        (1) 初始表达式为定义了一个number变量,并初始化为1
        (2) 条件表达式为number<=10,一旦number大于10就会退出循环
        (3) 状态表达式为不断自增变量number的值
         */
        for(int number=1; number <=10; ++number) {
            // 循环体中的代码为sum不断与number累加
            sum += number;
        }
        System.out.println("sum:"+sum);
    }
}

在以上代码实例中,初始表达式只执行一次,即定义变量number并初始化为1。然后在条件表达式中判断条件是否成立,即判断number是否小于等于10,如果条件成立就执行循环体中的代码:将变量sum与number累加,再将求和的结果赋值给变量sum。最后通过状态表达式++number来进行自增运算,再进入下一次循环:判断条件是否成立,若成立就执行循环体中的代码,否则退出循环。对以上代码进行梳理,读者可进一步理解for循环的执行过程:

(1) 计算初始表达式的值
(2) 判断条件是否成立,如果成立就执行循环体中的代码,否则退出循环
(3) 计算状态表达式,更新变量的状态
(4) 重复(2)(3)步的操作

6.2.3 while循环结构

(1) while循环语法结构

while (expression){
    ;
}

expression表示表达式,当表达式的值为真值时,会循环执行while循环体中的的代码,否则会退出循环。

代码实例-计算1到10之间的奇数的和:

public class HelloJava{
    public  static void main(String[] args) {
        // 定义变量sum来保存1到10之间的所有奇数的和
        int sum = 0;
        int number =1;
        int end = 10;
        // while中的条件表达式为number小于等于end,如果number大于end就退出循环
        while(number <= end){
            // 如果number与2求余后的结果为1,说明为奇数
            if(number % 2 == 1) {
                // 为奇数就相加
                sum += number;
            }
            // 在循环体中不断自增变量number的值,直到number大于end,退出循环
            ++number;
        }
        System.out.println("sum:"+sum);
    }
}


6.2.4 do-while循环结构

(1) do-while循环语法结构

do {
    ;
} while(expression);

do-while循环结构会先执行循环体中的代码,然后再判断while中的表达式是否为真,如果为真就继续执行,否则退出循环。代码实例-计算0到10之间的偶数的和:

public class HelloJava{
    public  static void main(String[] args) {
        // 定义变量sum来保存0到10之间的所有偶数的和
        int sum = 0;
        int number =0;
        int end = 10;
        do{
            // 如果number与2求余后的结果为0,说明为偶数
            if(number % 2 == 0){
                // 是偶数就相加
                sum+=number;
            }
            ++number;
        } while(number <=end);
        System.out.println("sum:"+sum);
    }
}


6.2.5 循环结构可以嵌套

循环结构同条件控制结构一样,也可以嵌套。同样地,嵌套的深度不宜过深(通常不应该超过两层),否则会导致代码的可读性变差,代码难以维护。

代码实例-计算1到10之间的所有合数的和:

public class StateMachine{
    public  static void main(String[] args) {
        // 定义变量sum来保存0到10之间的所有偶数的和
        int sum = 0;
        int end = 10;
        /*
        (1) 合数指自然数中除了能被1和本身整除外还能被其他数(0除外)整除的数
        (2) 所以首先排除1和2,在循环中直接从3开始迭代
         */
        for (int number = 3; number < end; ++number){
            // 如果从2到当前number的某一个数能整除number,说明一定是合数
            // 思考题,为什么是从2开始?
            int number_ = 2;
            while(number_ < number){
                if (number % number_ == 0){
                    // 如果求余后的结果为0,说明能被整除,是合数
                    sum += number;
                    // 执行break语句退出循环,思考这里为什么要退出循环?
                    break;
                }
                ++number_;
            }
        }
        System.out.println("0到10之间的合数的和:"+sum);
    }
}

在上文的代码实例中,在for循环中嵌套了while循环,同样可以在for循环中嵌套for循环,在while循环中嵌套while循环,for循环。同学们可将上文中的代码实例全部改成for循环结构,以比较while循环与for循环的使用区别。


6.2.6 课后习题

(1) 简述你对循环控制的理解。

(2) 在Java中通过哪些关键字来编写循环结构?

(3) 编写一个程序,计算1到100之间的所有奇数的和,使用for循环进行实现。

(4) 编写一个程序,计算1到100之间的所有偶数的和,使用while循环进行实现。

(5) 将6.2.5节中的代码实例全部改为for循环结构。

(6) 分别用for循环和while循环来编写一个死循环,死循环即不会退出的循环结构。

(7) 计算1到100之间的所有质数的和。提示:质数是指大于1的自然数,且除了1和它自身外,不能被其他自然数整除。可参考6.2.5节中的代码进行实现,so easy!

6.2.7 高薪就业班

  


欢迎 发表评论: