Scala编程实践:类与方法设计

66、编写一个方法,对可变参数列表中的数字进行平方运算,然后返回它们的和。满足以下测试用例:squareThem(2) 的结果为 4;squareThem(2, 4) 的结果为 20;squareThem(1, 2, 4) 的结果为 21。

以下是满足要求的 Scala 代码:

def squareThem(args: Int*): Int = {
  var sum = 0
  for (n <- args) {
    sum += n * n
  }
  sum
}

67、定义一个名为SimpleTime2的类,将分钟的默认值设置为0,使得在创建对象时可以不必指定分钟。满足以下测试:val t2 = new SimpleTime2(hours=10); t2.hours is 10; t2.minutes is 0

可将`SimpleTime`类修改为使用默认参数,将分钟默认值设为0。示例代码如下:

```scala
class SimpleTime2(val hours: Int, val minutes: Int = 0) {
  def subtract(other: SimpleTime2): SimpleTime2 = {
    if (this.hours < other.hours || (this.hours == other.hours && this.minutes < other.minutes)) {
      new SimpleTime2(0, 0)
    } else {
      val totalMinutesThis = this.hours * 60 + this.minutes
      val totalMinutesOther = other.hours * 60 + other.minutes
      val diffMinutes = totalMinutesThis - totalMinutesOther
      new SimpleTime2(diffMinutes / 60, diffMinutes % 60)
    }
  }
}

##68、证明命名参数和默认参数可用于方法。创建一个类 `Item`,它接受两个类参数:一个字符串类型的名称和一个双精度类型的价格。添加一个 `cost` 方法,该方法具有命名参数 `grocery`(布尔类型)、`medication`(布尔类型)和 `taxRate`(双精度类型)。将 `grocery` 和 `medication` 默认设为 `false`,`taxRate` 默认设为 `0.10`。在这种情况下,食品杂货和药品不征税。通过计算适当的税款返回商品的总成本。满足以下测试:`val flour = new Item(name="flour", 4); flour.cost(grocery=true) is 4; val sunscreen = new Item(name="sunscreen", 3); sunscreen.cost() is 3.3; val tv = new Item(name="television", 500); tv.cost(taxRate = 0.06) is 530`
以下是满足该需求的 Scala 代码:

```scala
class Item(val name: String, val price: Double) {
  def cost(grocery: Boolean = false, medication: Boolean = false, taxRate: Double = 0.10): Double = {
    if (grocery || medication) {
      price
    } else {
      price + price * taxRate
    }
  }
}

可以使用以下代码进行测试:

val flour = new Item(name = "flour", 4)
assert(flour.cost(grocery = true) == 4)
val sunscreen = new Item(name = "sunscreen", 3)
assert(sunscreen.cost() == 3.3)
val tv = new Item(name = "television", 500)
assert(tv.cost(taxRate = 0.06) == 530)

69、创建五个重载方法,将它们的参数相加。第一个方法没有参数,第二个方法有一个参数,依此类推。满足以下测试:f() 结果是 0;f(1) 结果是 1;f(1, 2) 结果是 3;f(1, 2, 3) 结果是 6;f(1, 2, 3, 4) 结果是 10。

// 定义重载方法 f
object OverloadingExample {
  def f(): Int = 0
  def f(a: Int): Int = a
  def f(a: Int, b: Int): Int = a + b
  def f(a: Int, b: Int, c: Int): Int = a + b + c
  def f(a: Int, b: Int, c: Int, d: Int): Int = a + 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值