在对函数参数问题进行补充时,我需要引入一个新的代码:
Int*:它也可以叫做可变参数,它允许函数接受可变数量的同类型参数。
注意事项:- 当作集合处理:虽然在调用时可以传入多个独立的参数,但在函数内部,可变参数本质上是一个 Seq 类型的集合。
- 位置限制:一个函数只能有一个可变参数,并且可变参数必须是参数列表中的最后一个参数。例如下面这样的定义是错误的
- 与数组的关系:如果已经有一个数组,想要将数组元素作为可变参数传入函数,可以在数组变量后面加上
:_*
举个例子:当我需要求出某一次考试的平均值时,可以输入以下代码:
object base38 {
// 传入不同的数量的参数
// 第一个参数是学生的名字,从第二个参数开始,是这个学生的某些学科的得分
// 要求:允许传入不同个数,但是类型相同的参数
// Int*
// Array 数组
def greet(name: String, score: Int*): Unit = {
// score 是一个列表
var total: Double = 0
for (i <- score) {
total += i
}
val avg = total / score.length
println(s"${name}, 平均分是:${avg}")
}
def main(args: Array[String]): Unit = {
greet("小花", 90, 100, 98, 100, 60)
greet("小明", 80, 88)
greet("小张", 90)
}
}
运行结果如图所示:
假如我需要求一些数字的和时,我们可以选择打出以下代码:
object base39 {
// 1.可能会陷入死循环:
// 2. 适合解决一类问题:
// (1)可以把大问题,拆分成同类的小问题
// (2)当问题足够小的时候,可以直接求解
// f(n) = 1 + 2 + 3 + 4 + ... + n
// f(100) = 1 + 2 + 3 + 4 + ... + 99 + 100
// 1+2+3+...+98+99 f(99)
// f(98)
// f(1) = 1
def test(): Unit = {
}
// 1 + 2 + 3 + 4 + ... + n
def sum(n: Int): Int = {
if (n == 1) {
1
} else {
sum(n - 1) + n
}
}
def main(args: Array[String]): Unit = {
val result = sum(10)
println(s"1到10的和为:$result")
}
}
运行结果如图所示:
当我需要依靠代码去计算整数的阶乘时,可以打出以下代码: