Java学习笔记2.5.2 循环结构 - 计数循环
Posted howard2005
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java学习笔记2.5.2 循环结构 - 计数循环相关的知识,希望对你有一定的参考价值。
文章目录
零、本讲学习目标
- 理解for循环的构成与执行情况
- 学会使用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 循环结构 - 计数循环的主要内容,如果未能解决你的问题,请参考以下文章