Java学习笔记2.5.2 循环结构 - 计数循环

Posted howard2005

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java学习笔记2.5.2 循环结构 - 计数循环相关的知识,希望对你有一定的参考价值。

文章目录

零、本讲学习目标

  1. 理解for循环的构成与执行情况
  2. 学会使用for循环编程解决问题

一、计数循环概念

  • 计数循环,即for循环,是最常用的循环,一般用于循环次数已知的情况,通常情况下可以代替while循环。

二、计数循环使用

(一)语法格式

for(初始化表达式; 循环条件; 操作表达式)
    执行语句
    ...
    break | continue
    ...

(二)执行流程


当循环条件成立时,执行循环,直到循环条件不成立时,终止循环。

(三)案例演示

任务1、演示死循环(永真循环)

package net.hw.lesson07;

/**
 * 功能:利用for循环实现死循环
 * 作者:华卫
 * 日期:2020年4月14日
 */
public class Example701 
    public static void main(String[] args) 
        // 理论上是死循环,但实际上会结束
        int i;
        for (i = 1; i >= 1; i = i + 10000) 
            System.out.println("i = " + i);           
        
        System.err.println("i = " + i);

        // 最直接了当的死循环,相当于while(true)
        for (; ; ) 
            System.out.println("我要出去玩!");
        
    

  • 运行程序,查看结果
  • 会一直输出“我要出去玩!”,永远都不会结束,除非我们强制终止应用程序。

任务2、计算1 + 2 + 3 + …… + 100的值

  • 等差数列求和问题,公差为1,如果循环变量是i,那么循环的更新条件就是i++。
package net.hw.lesson07;

/**
 * 功能:计算1 + 2 + 3 + …… + 100的值
 * 作者:华卫
 * 日期:2020年4月14日
 */
public class Example702 
    public static void main(String[] args) 
        int sum = 0;

        for (int i = 1; i <= 100; i++) 
            sum += i;
        

        System.out.println("1 + 2 + 3 + …… + 100 = " + sum);
    

  • 运行程序,查看结果
  • 可以参看实现相同任务的Python代码

课堂练习1:编程计算1 + 3 + 5 + …… + 99的值

  • 提示:有三种方法可以解决此问题。
    (1)修改循环的更新条件:i = i + 2;
    (2)在循环结构里嵌套一个过滤器:if (i % 2 == 1) sum += i;
    (3)修改循环条件:i <= 50,修改累加语句 sum += 2 * i - 1;

任务3、打印全部水仙花数

  • 所谓水仙花数,是指等于其各位数字立方和的三位数。

\\qquad 153 = 1 3 + 5 3 + 3 3 153=1^3+5^3+3^3 153=13+53+33
\\qquad 370 = 3 3 + 7 3 + 0 3 370=3^3+7^3+0^3 370=33+73+03
\\qquad 371 = 3 3 + 7 3 + 1 3 371=3^3+7^3+1^3 371=33+73+13
\\qquad 407 = 4 3 + 0 3 + 7 3 407=4^3+0^3+7^3 407=43+03+73

  • 分析问题,首先水仙花数是三位数,那么我们可以确定范围:100~999,这个我们可以通过循环结构来搞定:
for (int n = 100; n <= 999; n++) 
    ...

  • 然后对于这个范围的每个数n,我们要去判断它是否等于其各位数字的立方和,这里的难点或关键在于如何分解一个三位数,得到它的每位数字。

  • 假设我们已经把三位数n分解成百位数p3,十位数p2,个位数p1,
    这样我们的筛选条件就可以写出来:n == p3 * p3 * p3 + p2 * p2 * p2 + p1 * p1 * p1。

  • 如何拆分一个三位数n呢?

  • 首先求n的个位数:n % 10
    然后要将三位数变成两位数:n = n / 10;
    对于新的两位数n,又求它的个位数:n % 10
    然后要将两位数变成一位数:n = n / 10;

  • 也就是说我们可以交替使用求余和整除运算将一个三位数拆分,得到它的个位数、十位数和百位数。当然这个分解方法可以推广到任何多位数的拆分。

package net.hw.lesson07;

/**
 * 功能:打印水仙花数
 * 作者:华卫
 * 日期:2020年4月14日
 */
public class Example703 
    public static void main(String[] args) 
        // 声明部分
        int p3; // 百位数
        int p2; // 十位数
        int p1; // 个位数

        // 处理部分
        for (int n = 100; n <= 999; n++)  // 循环头:初始条件、循环条件、更新条件
            p1 = n % 10; // 得到个位数
            p2 = n / 10 % 10; // 得到十位数
            p3 = n / 100; // 得到百位数
            if (n == p1 * p1 * p1 + p2 * p2 * p2 + p3 * p3 * p3) // if负责筛选工作
                System.out.println(n + " = " + p3 + "^3 + " + p2 + "^3 + " + p1 + "^3");
            
        
    

  • 运行程序,查看结果

课堂练习2:输出指定范围内的闰年

  • 输出2000~2500之间的所有闰年,要求每行输出5个年份,并且统计总共有多少个闰年。

  • 提示:用for循环控制范围,在循环里嵌套一个选择结构负责筛选和统计闰年个数,选择结构里还要嵌套选择结构来负责每输出5个年份就换行。

以上是关于Java学习笔记2.5.2 循环结构 - 计数循环的主要内容,如果未能解决你的问题,请参考以下文章

Java 第五章 循环结构学习笔记

Java学习笔记2.5.3 循环结构 - 循环嵌套

Java学习day05

Java学习笔记14---使用标志位控制循环

JAVA学习笔记-循环结构

Java学习笔记--循环总结