开发者学堂课程【Scala 核心编程-基础:多重循环应用案例】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/609/detail/8923
多重循环应用案例
目录
一、多重循环控制
二、应用实例
一、 多重循环控制介绍
1、将一个循环放在另一个循环体内,就形成了嵌套循环。其中,for,while,do…while 均可作为外层循环和内层循环。【建议一般使用两层,最多不要超过3层】
2、实质上,嵌套循环就是把内层循环当成外层循环的循环体。当只有内层循环的循环条件为 false 时,才会完全跳出内层循环,才可以结束外层的当次循环,开始下一次的循环。
3、设外层循环次数为 m 次,内层为 n 次,则内层循环体实际上需要执行 m*n=mn 次。
二、应用实例
1.统计三个班成绩情况,每个班有5名同学,求出各个班的平均分和所有班级的平均分[学生的成绩从键盘输入]
例子:
新建一个包为 mutlfor,然后再创建一个文件为 Exercise
(1)分析思路:
① 定义 classNum 表示班级的个数,定义 stuNum 表示学生个数
② classScore 表示各个班级的总分,totalScore 表示所有班的总分
③ score 表示各个学生的成绩
④ 使用循环的方式输入成绩
(2)代码package com.atguiu.chapter04.mutlfor
o
bject Exercise {
val classNum = 3
//定义有3个班级
v
al stuNum = 5
//定义每个班级有5个学生
v
ar score = 0.0
//学生的分数
v
ar classScore = 0.0
//定义各个班级的总分
var totalScore =0.0
//所有班级的总分
for (
i
<-1
t
o classNum)
{
//先对班级进行 for 循环
//
先将c
lassScore
清0
classScore = 0.0
f
or (j <- 1 to stuNum) {
printf
(“
请输入第%d班级的第%d个学生的成绩\
n”,i,j)
score
= StdIn.readDouble()
//接收
//统计
c
lassScore +=score
}
p
rintf(“
第%d班级的平均分为%
.2
f\
n”,i,classScore / stuNum)
//打印
注意:如果按照此方法编写,第一个班打印出来是正确的,但是第二个班及后续班级打印出来就会出现错误,因为对第二个班级进行遍历的时候,会对之前的数据进行累积,所以需要先将 classScore清0。
}
运行结果如下:
//计算出所有班的平均分
在原有代码的基础上进行修改:
//累计 totalScore
t
otalScore +=classScore
print
f(“
所有班级的平均分为%
.2
f
”
,t
otalScore / (stuNum * classNum))
2.统计三个班及格人数,每个班有5名同学。
例子:
新建一个 Exercise02,输入代码:package com.atguiu.chapter04.mutlfor
import scala.io._
//引入包
o
bject Exercise02 {
val classNum = 3
//定义有3个班级
v
al stuNum = 5
//定义每个班级有5个学生
v
ar score = 0.0
//学生的分数
v
ar classScore = 0.0
//定义各个班级的总分
var totalScore =0.0
//所有班级的总分
var passNum = 0
//统计及格人数
for (
i
<-1
t
o classNum)
{
//先对班级进行 for 循环
//
先将c
lassScore
清0
classScore = 0.0
f
or (j <- 1 to stuNum) {
printf
(“
请输入第%d班级的第%d个学生的成绩\
n”,i,j)
score
= StdIn.readDouble()
//接收
i
f (score >= 60) {
//如果分数大于等于60,则认为此人成绩及格
p
assNum += 1
//统计
c
lassScore +=score
}
p
rintf(“
第%d班级的平均分为%
.2
f\
n”,i,classScore / stuNum)
t
otalScore +=classScore
print
f(“
所有班级的平均分为%
.2
f
”
,t
otalScore / (stuNum * classNum))
print
f(“
所有班级的及格人数为%d
”
,
passNum))
运行结果如下:
结果正确
3.打印出九九乘法表
例子:
创建一个文件为 Exercise03,编写代码:package com.atguigu.chapter04.mutlfor
o
bject Exercise03 {
def main(args:Array[String]):Unit = {
思路分析:
(1)使用两层循环,有9行,每一行的列数在增加
//为什么使用两层循环,因为打印的表有很多列和行,随着行数的增加,列数也在增加
(2)根据逻辑,可以编写代码
//列的个数就是行的个数
val num = 9 //
定义一个变量为9
for (
i
<- 1 to num)
{
//
确定行数
for (j <- 1 to i ) { //
确定列数
p
rintf(“%d * %d = %d\n”,i,j,i*j)
}
执行结果与答案顺序不同,应该for循环一次再进行换行,对该代码进行如下改进:p
rintf(“%d * %d = %d\t”,i,j,i * j)
}
print
l
n()
}
}}
运行效果如下:
顺序还是不同,只需要将i与j交换位置即可:p
rintf(“%d * %d = %d\t”,
j
,
i
,i * j)
//在同一行中i不会发生变化,会固定下来
运行结果如下:
结果正确