一、gender(参数的默认值)
1.格式:def 函数名(参数1:类型1=默认值1,参数2:类型2=默认值2)
例子:
// gender(参数的默认值)
def greet(name:String="哈哈",age:Int=18,gender:String="女"):Unit = {
println(s"我是${name},我今年${age},${gender}")
}
def main(args: Array[String]): Unit = {
greet("小花",18) // 默认值 提供两个参数
greet("小明",20,"男") 使用所有参数
greet() 使用的默认值
}
注意:传参数的时候,如果只传一个参数,其他只用默认值,则需要将该参数的参数类型(名字)添加在前面即可例如 :greet(age = 20)
例子:
def greet(name:String="哈哈",age:Int=18,gender:String="女"):Unit = {
println(s"我是${name},我今年${age},${gender}")
}
def main(args: Array[String]): Unit = {
greet("小花",18) // 默认值
greet("小明",20,"男")
greet()
// 设置age为20,其他采用默认值
// 传参数的时候,指定参数的名字
greet(age = 20)
greet(gender = "男",age = 20)
}
二、 函数的调用
1.如果函数不需要参数,可以在定义函数的时候,省略()
2.如果定义函数的时候没有写(),那么在调用函数的时候,也不要写()
例子(图):
例子(代码):
// 如果函数不需要参数,可以在定义函数的时候,省略()
def greet:Unit = {
println(s"hahahaha~~~")
}
def main(args: Array[String]): Unit = {
// 如果在定义函数的时候没有写(),那么在调用函数的时候,也不要写()
greet() //此处写了 () 是错误的,改为正确的方法:直接将 () 给删除掉就OK
}
三、传入参数的数量
1.传入不同的数量的参数
2.变参:允许传入不同个数,但是类型相同
3.Int* : Int*:表示可变参数,用于声明一个方法或者函数可以直接接受 零个或多个Int类型的额参数
-
:(1)是Scala中用于标记可变参数的特殊符号,放在类型后面。例如:Int* String*
(2)当方法参数声明为 Int* 时,调用该方法时可以传入任意数量的 Int 值(包括零个),这些值会被自动封装成一个 Seq[Int] 序列在方法内部使用。
4.array:数组
例子(代码):
def greet(name:String, score:Int*):Unit = {
// score 是一个列表
var total:Double = 0
for(i <- score){
total += 1
}
val avg = total / score.length
println(s"${name},平均分:${avg}")
}
def main(args: Array[String]): Unit = {
greet("泡芙",90,95,100)
greet("芒果",85,90,95)
greet("小花",90)
}
四、递归函数
1.定义:指在函数体内直接·或间接调用自身的函数,。
2.可能导致死循环
3.适合解决一类问题 (1)可以把大问题拆分成同类的小问题 (2)当问题足够小的时候,可以直接求和
4.起始条件:一个递归的终止条件,确保递归不会无限进行。它处理最简单的情况并返回结果。
递归规则:在这个部分,函数会调用自身,以解决一个更小的子问题。
基本结构 例子(图):
例子(代码):
def sum(n:Int):Int = {
if(n == 1){
1
}else{
sum(n-1) + n
}
}
def main(args: Array[String]): Unit = {
val s = sum(100)
println(s)
}