Scala元组

80 阅读2分钟

求两个数的最大值

  • 首先,下面这段代码定义了一个 max 函数,用来接收两个 Int 类型的参数 xy,返回值类型也为 Int。函数内部通过 if-else 条件判断实现核心逻辑:如果 x 大于 y,则返回 x,否则返回 y
  • 其次,用main 方法接收一个 Array [String] 类型的参数,返回值类型为 Unit(表示无实际返回值)。在 main 方法中,通过调用 max (1, 100) 得到结果并赋值给变量rst,最后使用 println 函数输出结果。由于 100 大于 1,程序会输出 100。
// 定义一个函数
// 功能:求两个数的较大者
def max(x:Int, y:Int):Int ={
  if(x > y)
    x
  else
    y
}
def main(array: Array[String]): Unit = {
  val rst = max(1,100)

  println(s"${rst}")
}

  • 下面这段代码中的 max 函数实现思路略有不同,它先将 x 和 y 中的较大值赋值给变量 t,然后返回 t。虽然实现方式与第一段代码不同,但最终达到的效果完全一致,都是返回两个参数中的最大值。

  • 此外,第二段定义了一个 say 函数,该函数没有参数,返回值类型为 Unit,函数体仅包含一条打印语句,输出字符串

  • main 方法中,程序同样调用了 max (1, 100) 并打印结果,输出值仍然是 100。

// 定义一个函数
// 功能:求两个数的较大者
// 格式:
// 1. 有一个 =
// 2. 返回值类型。
//      函数内的最后一个表达式或者语句的值,就是函数的返回值。
//      Unit 表示没有返回值,调用这个函数时,不会接收到任何的处理结果。
def max(x: Int, y: Int): Int = {
  val t = if (x > y) x else y

  t // 就是返回值
}

// 如果一个函数不需要参数,可以省略()
def say: Unit = {
  printf("hahahaha~~~")
}

def main(args: Array[String]): Unit = {
  val rst = max(1, 100)

  println(s"${rst}")

// 调用一个没有()的函数,也不要加()
}

下面这段代码通过嵌套的 if - else if - else 语句,依次判断 xyz 三个数的大小关系

  • 首先判断 x 是否同时大于 y 和 z,如果是,x 就是最大值;否则判断 y 是否同时大于 x 和 z,若是,y 为最大值;都不满足的话,z 就是最大值。
  • 先通过 if - else 语句找出 x 和 y 中的较大值并赋值给 t,然后再通过 if - else 语句比较 t 和 z 的大小,最后输出三个数中的最大值
// 定义一个函数
// 功能:求三个数的最大者
// 分析:

/*
1.三选一
if(x>=y && x >=z){
  x
} else if(y>=x&&y>=z){
  y
} else{
  z
}
2. 两次 二选一
var t = if(x>y) x else y
if(t>z) t else z
 */
def max(x: Int, y: Int, z: Int): Int = {
  // 先比较x和y的最大值,再与z比较得到三个数的最大值
  val t = if (x > y) (if (x > z) x else z) else (if (y > z) y else z)
  t // 就是返回值
}

def main(args: Array[String]): Unit = {
  val rst = max(10, 1, 100)
  println(s"$rst")
}

  • 下面代码中 max 函数的定义,它接收三个 Int 类型的参数 xyz,返回值类型是 (Int, Int),这表示函数会返回一个包含两个 Int 类型元素的元组,分别用于存储最小值和最大值。

  • 在函数内部,先求最大值。通过两次 if - else 判断:首先比较 x 和 y,将较大的值赋给 maxValue;然后再比较 maxValue 和 z,把更大的值更新到 maxValue 中,这样就得到最大值。

  • 接着求最小值,同样通过两次 if - else 判断:先比较 x 和 y,将较小的值赋给 minValue;再比较 minValue 和 z,把更小的值更新到 minValue 中,从而得到最小值。

  • 最后,函数返回一个元组 (minValue, maxValue),这个元组就是包含了最小值和最大值的整体。

// 定义一个函数
// 功能:求三个数的最大值和最小值。
// 注意:函数需要返回多个值:把要返回的数据使用()包在一起,成为一个整体
def max(x: Int, y: Int, z: Int): (Int, Int) = {
  var maxValue = if(x>y) x else y
  maxValue = if(maxValue>z) maxValue else z

  var minValue = if(x<y) x else y
  minValue = if(minValue<z) z else minValue

  // println(minValue, maxValue)
  (minValue, maxValue) // 是一个整体
}

def main(args: Array[String]): Unit = {
  val rst = max(1000, 200, 100)
  // 访问这个整体中的某个值:_数字
  println(s"最小值是:${rst._1}, 最大值是:${rst._2}")
}