本章工作任务
计算竞赛平均分
用字符*打印图案
打印九九乘法表
统计打折商品数量
本章技能目标
掌握二重循环的使用
掌握二重循环中跳转语句的使用
本章简介
通过前面几章的学习,我们学会了用循环和数组解决实际问题,掌握了用循环处理程序中需要重复执行的动作。 if 语句是可以嵌套的,那循环语句是否也可以嵌套呢?答案是肯定的,而且嵌套循环能解决更多有意思的问题。下面就开始我们的学习之旅。
预习作业
指导:请按以下步骤预习本章内容:
1. 阅读、学习本章内容。
2. 标注出本章看不懂或存在疑惑的部分。
3. 整理、记录学习中的问题。
4. 熟记本章的英文单词。
1. 背诵英文单词
请在预习时找出下列单词在教材中的用法,了解它们的含义和发音。
(1) triangle [ˈtraɪæŋɡl]: n. 三角(形);三角关系;三角形之物;三人一组
(2) circle [sɜːkl]: n. 循环,周期;圆;圈子;圆形物;vi. 盘旋,旋转;环行;vt. 画圆圈;环绕…移动
(3) diamond [ˈdaɪəmənd]:n. 钻石,金刚石;菱形;方块牌;adj. 菱形的;金刚钻的
(4) password [ˈpɑːswɜːd]: n. 密码;口令
(5) row [rəʊ]: n. 行,排;划船;街道;吵闹;vt. 划船;使……成排;vi. 划船;争吵
2. 预习并回答以下问题
请阅读本章内容,在作业本上完成以下简答题。
(1) 请写出至少三种二重循环的形式。
(2) 阅读代码,并写出输出结果。
public static void main(String[] args) { int count = 0; for (int i = 0; i <=2; i++) { for (int j = 0; j < 3; j++) { count++; } } System.out.printin(count); }
3. 预习并完成编码题
(1) 编写并完成本章中所有示例代码。
(2) 请使用 Java 语言编写代码,完成以下功能。
使用二重循环实现:打印以下图形。
###
###
###
技术内容
9.1二重循环结构
通过前面的学习,我们已经知道了什么是循环,以及循环的三种形式,即 while 循环、 do-while循环和 for 循环,本章我们将深入学习循环——二重循环,并使用二重循环解决更复杂的问题。
首先,通过一个练习来回顾循环的用法。
9.1.1 技能训练
上机练习1
练习——计算竞赛平均分
需求说明
某次程序大赛,某班有四名学员参加,学员的成绩由用户输入,计算该班参赛学员的平均分。
程序运行结果如图 9.1 所示。
图 9.1 上机练习 1 的运行结果
提示:参考实现步骤如下。
(1) 定义一个数组,保存学员成绩。
(2) 利用循环将数组中的成绩累加。
(3) 计算平均成绩并输出。
9.1.2 为什么使用二重循环
问题:在上机练习 1 中通过编写程序,计算出了一个班级的平均分,但如果有三个班级各四名学员参赛,如何计算每个班级参赛学员的平均分呢?
分析:循环能够解决计算机重复执行的动作,所以对于上机练习 1, 利用循环重复输入一个班级四位参赛学员的成绩。现在是三个班级,因此需要循环三次计算每个班的平均分。而每个班有四名学员,所以对每个班级需要循环四次累加总分。可以用一个循环控制班级的数量,用另一个循环控制每个班级学员的数量,这样就得到了二重循环。
9.1.3 什么是二重循环
什么是二重循环呢?简单地说,二重循环就是一个循环体内又包含另一个完整的循环结构。前面我们学习了三种循环: while 循环、 do-while 循环和 for 循环。这三种循环之间是可以互相嵌套的,一个循环要完整地包含在另一个循环中,如下面四种形式都是合法的。
语法
//while与while循环嵌套 while() { //循环操作1 while(循环条件2) { //循环操作2; } } //do-while与do-while循环嵌套 do { //循环操作1 do { //循环操作2 }while(循环条件2); }while(循环条件1); //for与for循环嵌套 for(循环条件1){ //循环操作1 for(循环操作2) { //循环操作2 } } //while与for循环嵌套 while(循环条件1){ //循环操作1 for(循环条件2){ //循环操作2 } }
上面四种形式中,循环条件 1 和循环操作 1 对应的循环称为外层循环,循环条件 2 和循环操作 2对应的循环称为内层循环,内层循环结束后才执行外层循环的语句。在二重循环中,外层循环变量变化一次,内层循环变量要从初始值到结束值变化一遍。
9.1.4 如何使用二重循环
知道了二重循环的形式,下面就利用二重循环解决计算三个班级平均分的问题。
示例1
package cn.jbit.array; import java.util.Scanner; /* * 计算3个班级的平均分 */ public class AvgScore { public static void main(String args[]){ int[] score = new int[4]; //成绩数组 int classNum = 3; //班级数目 double sum = 0.0; //成绩总和 double average = 0.0; //平均成绩 //循环输入学员成绩 Scanner input = new Scanner(System.in); for(int i = 0; i < classNum; i++){ sum = 0.0f; //成绩总和归0 System.out.println("请输入第" + (i+1) + "个班级的成绩"); for(int j = 0; j < score.length; j++){ System.out.print("第" + (j+1) + "个学员的成绩:"); score[j] = input.nextInt(); sum = sum + score[j]; //成绩累加 } average = sum / score.length; //计算平均分 System.out.println("第" + (i+1) + "个班级参赛学员的平均分是:" + average + "\n"); } } }
示例 1 演示了如何用二重循环计算每个班级平均分的问题。在这个示例中,使用了两个 for 循环,其中外层循环控制班级的数量,内层循环控制每个班参赛学员的人数。程序运行结果如图 9.2所示。
图 9.2 示例 1 的运行结果
二重循环使用起来很方便。下面通包一个示例,学习如何用二重循环打印图形。
问题:用字符*打印矩形图案,效果如下。
*****
*****
*****
*****
*****
分析:上面的图形共有五行,需循环五次打印每行,每行有五个字符*,需循环五次打印字符*,可以用二重循环实现。外层循环控制行数,内层循环控制每行的字符*的个数。所以外层循环变量i的值为 1〜5,内层循环变量j 的值也为1〜5 。
用二重循环打印矩形字符*的代码如示例 2 所示。
示例2
package cn.jbit.array; /** * 打印矩形 */ public class Rectangle { public static void main(String[] args) { System.out.println("打印矩形"); for(int i = 0; i < 5; i++){ for(int j = 0; j <5; j++){ System.out.print("*"); } System.out.print("\n"); //换行 } } }
循环结构包括循环条件和循环操作。上述代码中,变量 i 表示第 i 行,现在要打印五行,可以得到外层循环条件。内层循环操作就是打印字符*,变量 j 控制了内层循环的循环条件。根据分析,每行打印五个字符*,这样就得到了内层循环条件,打印完一行后要换行。程序运行结果如图 9.3 所示。
图 9.3 示例 2 的运行结果