★ Scala ★——方法def 与 函数 细则,99乘法表案例实现

本文深入探讨Scala中的方法和函数,包括定义、使用及转换。通过实例展示了如何使用方法和函数实现99乘法表,并分析了两者的区别。此外,还介绍了默认参数、带名参数和变长参数的使用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

源码链接:https://pan.baidu.com/s/1psmnL2keRW_N781Cn-kBzg
提取码:ce34

★ Scala ★——方法def 与 函数 细则,99乘法表案例实现

★ Scala ★——类和对象(伴生对象)大全细则

★ Scala ★——继承、方法重写、抽象类、匿名类大全细则

★ Scala ★——Trait特质大全细则

★ Scala ★ —— 数据结构(列表、元组、数组)

★ Scala ★ —— 数据结构(集、映射、迭代器)

  • 目标:
  1. 掌握方法的格式和用法
  2. 掌握函数的格式和用法
  3. 掌握九九乘法表案例

1. 方法

1.1 概述方法格式

def 方法名(参数名:参数类型, 参数名:参数类型) : [return type] = {
 	方法体
}

注意:

  • 参数列表的参数类型不能省略 ;
  • 返回值类型可以省略,由scala编译器自动推断 ;
  • 返回值可以不写return,默认就是{}块表达式的值。
  • 示例:
  1. 定义一个方法getMax,用来获取两个整型数字的最大值, 并返回结果(最大值).
  2. 调用该方法获取最大值, 并将结果打印到控制台上
package Test

object ClassDemo1 {
  def main(args: Array[String]): Unit = {
    val max1 = getMax1(20,30)
    println("max1最大值:"+max1)

    val max2 = getMax2(6,4)
    print("max2最大值:"+max2)
  }
  
  // 1.标准方法
  def getMax1(a:Int, b:Int): Int = {
    return if(a > b) a else b
  }
  
  // 2.优雅方法
  def getMax2(a:Int, b:Int) = if(a > b) a else b // 推断出是Int类型
}

在这里插入图片描述
注意: 定义递归方法,不能省略返回值类型

  • 示例递归方法,求阶乘
  1. 定义方法factorial, 用来计算某个数字的阶乘规律: 1的阶乘等于1, 其他数字的阶乘为: n! = n * (n - 1)!
  2. 调用方法, 获取num阶乘, 并将结果打印到控制台上。
package Test
import scala.io.StdIn

object ClassDemo2 {
  def main(args: Array[String]): Unit = {
    println("please input num:")
    val num = StdIn.readInt()
    val f = factorial(num)
    println(s"${num}的阶乘为:"+f)
  }
  // 求阶乘
  def factorial(n:Int):Int = if (n==1) 1 else n * factorial(n-1)
}

在这里插入图片描述

1.2 方法参数

scala中的方法参数,使用比较灵活。它支持以下几种类型的参数:

  • 默认参数,在定义方法时可以给参数定义一个默认值。
  • 带名参数,在调用方法时,可以指定参数的名称来进行调用。
  • 变长参数,如果方法的参数是不固定的,可以将该方法的参数定义成变长参数。

格式: def 方法名(参数名:参数类型*): 返回值类型 = { //方法体 }

  • 注意:
  1. 在参数类型后面加一个 * 号,表示参数可以是0个或者多个;
  2. 一个方法有且只能有一个变长参数, 并且变长参数要放到参数列表的最后边。
  • 示例
package Test

object ClassDemo3 {

  def main(args: Array[String]): Unit = {
    val sum1 = getSum1()
    println("默认参数: "+ sum1)

    val sum2 = getSum1(a=1, b=7)
    println("a=1, b=7 带名参数: "+ sum2)

    val sum3 = getSum2(1,3,5,7,8)
    println("变长参数累计求和: "+sum3)
  }

  def getSum1(a:Int = 11, b:Int = 22) = a + b

  // 变长参数,累计求和
  def getSum2(a:Int*) = a.sum
}

在这里插入图片描述

2. 函数

scala支持函数式编程,将来编写Spark/Flink程序会大量使用到函数

2.1 定义函数

val 函数变量名 = (参数名:参数类型, 参数名:参数类型....) => 函数体

注意:

  • 在Scala中, 函数是一个对象(变量)
  • 类似于方法,函数也有参数列表和返回值
  • 函数定义不需要使用 def 定义
  • 无需指定返回值类型
  • 示例
package Test

object ClassDemo4{
  def main(args: Array[String]): Unit = {

    // 1. 定义一个用来计算两个整数和的函数, 并将其赋值给变量sum
    val getSum = (x:Int, y:Int) => x + y
    // 2. 调用函数.
    val result = getSum(10,2)
    // 3. 打印结果
    println("result: " + result)
  }
}

在这里插入图片描述

2.2 方法和函数的区别

在Java中, 方法和函数之间没有任何区别, 只是叫法不同。
但是在Scala中, 函数和方法就有区别了, 具体如下:

  1. 方法是隶属于类或者对象的,在运行时,它是加载到JVM的方法区中;
  2. 可以将函数对象赋值给一个变量,在运行时,它是加载到JVM的堆内存中;
  3. 函数是一个对象,继承自FunctionN,函数对象有apply,curried,toString,tupled这些方法;方法则没有。

结论: 在Scala中, 函数是对象, 而方法是属于对象的, 所以可以理解为: 方法归属于函数;而且方法无法赋值给变量
在这里插入图片描述
遇到上面的问题,我们可以把方法转换为函数

2.3 方法转换为函数

有时候需要将方法转换为函数. 例如: 作为变量传递,就需要将方法转换为函数。

val 变量名 = 方法名 _ //格式为: 方法名 + 空格 + 下划线

注意: 使用 _ 即可将方法转换为函数

  • 示例:对比 2.1 定义函数的代码
package Test

object ClassDemo5 {
  def main(args: Array[String]): Unit = {

    //1. 定义一个方法用来计算两个整数和
     def add(x:Int, y:Int)= x + y
    //2. 将该方法转换为一个函数,并赋值给变量
     val sum = add _

    // 3. 调用函数, 用来获取两个整数的和.
     val result = sum(100, 2)
    //4. 打印结果
     println("result: " + result)
  }
}

在这里插入图片描述

3. 方法、函数实现99乘法表

3.1 需求

定义方法、函数实现根据用户录入的整数, 打印对应的乘法表。

3.2 目的

  1. 考察键盘录入和方法、函数 的综合运用.
  2. 体会方法和函数的不同.

3.3 步骤

  1. 定义方法(或者函数), 接收一个整型参数;
  2. 通过for循环嵌套实现, 根据传入的整数, 打印对应的乘法表;
  3. 调用方法(函数), 输出结果。
package Test
import scala.io.StdIn

object ClassDemo6 {
  def main(args: Array[String]): Unit = {
    println("请输入一个整数:")
    val num1 = StdIn.readInt()
    Mtable(num1) // 调用方法
    println("--"*25)
    M_T(num1)	// 调用函数
  }

  // 用方法实现99乘法表
  def Mtable(n:Int) = {
    for(i <- 1 to n; j <- 1 to i){
      print(s"${i} * ${j} = ${i*j}\t")
      if(j==i) println()
    }
  }

  // 函数实现99乘法表
  var M_T = (n:Int) => {
    for(i <- 1 to n; j <- 1 to i){
      print(s"${i} * ${j} = ${i*j}\t")
      if(j==i) println()
    }
  }
}

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

唐樽

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值