【头歌】Scala中循环的使用 - 详解
【主要内容】While循环的使用;do...while 循环的使用;for 循环的使用。【实践内容】解题编程。
【提示】点击每一关参考答案可以快速复制。
目录
第1关:While循环的使用
任务描述
本关任务:编写一个能计算数组平均值和最大值的小程序。
相关知识
当我们想要对同样的操作执行多次,就需要使用到循环结构,在 Scala 中循环结构主要分为三种:
- while 循环;
- do...while 循环;
- for 循环。
今天我们来学习第一种循环结构 —— while 循环。
while 循环
首先我们来了解一下 while 循环的逻辑:
图1
如上图1所示,while 循环首先会判断 while 后面的条件是否成立,成立的话执行一次循环体语句序列,执行完成后,继续返回判断条件是否成立,如此反复,直到循环条件不成立,退出循环,它的语法格式如下所示:
while( 循环条件表达式 ) {
循环体语句序列
}
while 循环使用实例(循环打印 “hello” n 次):
import scala.io.StdIn
object WhileDemo {
def main(args: Array[String]): Unit = {
// 定义变量i
var i: Int =0
// 读取控制台输入的整数值
var num=StdIn.readInt()
// 当 i 小于 num 时,循环输出字符串 hello
while(i<num){
println("hello")
// i 变量加 1
i=i+1
}
}
当控制台输入 3 时,程序执行结果:
hello
hello
hello
注意: Java 里的 i++ 和 ++i 在 Scala 里不起作用,要想起到一样的效果,我们只能使用 i+=1 或者 i=i+1。
编程要求
仔细阅读右侧编辑区内给出的代码框架及注释,在 Begin-End 间编写程序代码,计算给定的 n 个整数中所有的非负数之和,具体要求如下:
- 接收给定的一行整数(例:4 56 5 -10 10,其中第一个数代表 n,其余数代表具体值);
- 计算除第一个数之外的所有非负整数之和。
测试说明
平台将使用测试集运行你编写的程序代码,若全部的运行结果正确,则通关。
例: 测试输入:
4 56 5 -10 10
预期输出:
71
参考答案
#代码文件
import scala.io.StdIn
object WhileDemo {
def main(args: Array[String]): Unit = {
// 请在 Begin-End 间编写代码
/********** Begin **********/
// 计算给定的 n 个整数中所有的非负数之和
// 定义变量i
var i: Int = 0
var sum: Int = 0
var n: Int = 0
// 读取控制台输入的整数值
var num=StdIn.readInt()
while(i<num){
n=StdIn.readInt()
if(n>=0){
sum = sum + n
}
// i 变量加 1
i=i+1
}
println(sum);
/********** End **********/
}
}
第2关:do...while 循环的使用
任务描述
本关任务:统计给定的 n 个整数中正数和负数的个数。
相关知识
当我们想要对同样的操作执行多次,就需要使用到循环结构,在 Scala 中循环结构主要分为三种:
- while 循环;
- do...while 循环;
- for 循环。
之前我们已经学习了 while 循环,今天我们来学习跟 while 循环相似的另一种循环结构 —— do...while 循环。
do...while 循环
首先我们来了解一下 do...while 循环的逻辑:
图1
如上图1所示,do...while 循环首先会执行一遍循环体语句,然后再判断 while 后面的条件是否成立,成立的话继续执行循环体语句,不成立的话退出循环,它的语法格式如下所示:
do {
循环体语句序列
} while(循环条件表达式)
do...while 循环与 while 循环的区别就在于 do...while 循环是先执行循环语句,后判断,而 while 循环是先判断,后执行循环语句,也就是说 do...while 循环会保证循环体语句最少被执行一遍。
do...while 循环使用案例:循环打印“hello” n 次。
import scala.io.StdIn
object WhileDemo {
def main(args: Array[String]): Unit = {
// 定义变量i
var i: Int =0
// 读取控制台输入的整数值
var num=StdIn.readInt()
// 在do后的花括号中编写循环语句
do{
println("hello")
i+=1
}
// 在while后判断条件
while (i<num)
}
}
当控制台输入 3 时,程序执行结果:
hello
hello
hello
编程要求
仔细阅读右侧编辑区内给出的代码框架及注释,在 Begin-End 间编写程序代码,统计给定的 n 个整数中正数和负数分别有多少个,具体要求如下:
- 接收给定的多行数据(例:4 \n 56 \n 5 \n -10 \n 10,其中第一个数代表 n,其余数代表具体值,\n 仅用来说明前一个数与另一个数之间是换行,实际数据中并没有);
- 统计正数和负数的个数(注意第一个数无需统计)。
测试说明
平台将使用测试集运行你编写的程序代码,若全部的运行结果正确,则通关。
例: 测试输入:
4
56
5
-10
10
预期输出:
正数个数:3
负数个数:1
参考答案
#代码文件
import scala.io.StdIn
object WhileDemo {
def main(args: Array[String]): Unit = {
// 定义变量 positive,并赋初值0,用于统计正数个数
var positive: Int =0
// 定义变量 negative,并赋初值0,用于统计负数个数
var negative: Int =0
// 定义变量 i,用于统计循环次数
var i: Int =0;
// 读取控制台输入的整数值
var n: Int =StdIn.readInt()
// 在do后的花括号中编写循环语句,统计正数个数和负数个数
do{
// 请在 Begin-End 间编写代码
/********** Begin **********/
if(i==0){
i = n
}
n = StdIn.readInt()
if(n>0){
positive = positive + 1
}else if(n<0){
negative = negative + 1
}
i = i - 1
}
// 在while后判断终止条件
while (i>0)
// 输出结果
println(s"正数个数:$positive")
println(s"负数个数:$negative")
/********** End **********/
}
}
第3关:for 循环的使用
任务描述
本关任务:输出所有的水仙花数。
相关知识
当我们想要对同样的操作执行多次,就需要使用到循环结构,在 Scala 中循环结构主要分为三种:
- while 循环;
- do...while 循环;
- for 循环。
之前我们已经学习了前面两种循环,今天我们来学习最后一种循环结构 —— for 循环。
for 循环
Java 中的 for 循环结构为:
for(初始化变量;检查变量是否满足,更新变量){
循环体;
}
但是 Scala 中没有以上结构,取而代之的是如下结构:
for( x <- 表达式 ){
循环体
}
这种结构的执行逻辑是让变量 x 遍历 “<-” 右边的表达式的所有值,需要注意的是,这里的变量 x 并不需要指定成 val 或者 var。另外右侧表达式中常使用到 to 方法和 until 方法。
1.to 方法的使用(1 to n 可以返回数字 1 到数字 n(含) 的一个区间):
object WhileDemo {
def main(args: Array[String]): Unit = {
// 循环打印四次“hello”
for(i <- 1 to 4){
println("hello")
}
}
}
执行结果:
hello
hello
hello
hello
2.until 方法的使用(1 until n 可以返回数字 1 到数字 n (不含)的一个区间):
object WhileDemo {
def main(args: Array[String]): Unit = {
// 循环打印三次“hello”
for(i <- 1 until 4){
println("hello")
}
}
}
执行结果:
hello
hello
hello
在 Scala 中,对循环的使用并不如其他语言那么频繁,因为我们可以通过对序列中的所有值应用于某个函数的方式来处理他们,而完成这项工作只需调用一次方法即可,比如使用 foreach。
object WhileDemo {
def main(args: Array[String]): Unit = {
// 定义一个序列
val x: Seq[Int] = 1 to 4
// 序列 x 通过 foreach 可以把序列中的每个值应用于 println 函数
x.foreach(x=>println(x))
}
}
执行结果:
1
2
3
4
编程要求
仔细阅读右侧编辑区内给出的代码框架及注释,在 Begin-End 间编写程序代码,输出所有的水仙花数。
水仙花数的特征:
- 该值处于 100(包括)到 999(包括)之间;
- 其个位数的三次幂,十位数的三次幂,百位数的三次幂的和等于这个数本身。
测试说明
平台将使用测试集运行你编写的程序代码,若全部的运行结果正确,则通关。
例: 测试输入:
无
预期输出:
407是一个水仙花数
参考答案
#代码文件
object ForDemo {
def main(args: Array[String]): Unit = {
// 请在 Begin-End 间编写代码
/********** Begin **********/
// 使用 for 循环输出所有的水仙花数
for (num <- 100 to 999) {
val a = num / 100
val b = num % 100 / 10
val c = num % 100 % 10
if (a*a*a+b*b*b+c*c*c == num){
println(num.toString()+"是一个水仙花数")
}
}
/********** End **********/
}
}
至此,所有内容都完成辣。如果存在任何问题欢迎大佬指教🥰!
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)