《快学Scala》习题详解 第6章 对象

1 编写一个Conversions对象,加入inchesToCentimeters,gallonsToLiters和milesToKilometers方法

object Conversions {
  def inchToCen(x: Double) { println(x * 2.54) }
  def gallToLiter(x: Double) { println(x * 3.8) }
  def milesToKilo(x: Double) { println(x * 1.6) }
  def main(args: Array[String]): Unit = {
    //单例对象中定义的字段、方法类似Java中静态成员,只能通过对象名访问
    Conversions.inchToCen(3)
    Conversions.gallToLiter(3)
    Conversions.milesToKilo(3)
  }
}

2 前一个练习不是很面向对象。提供一个通用的超类UnitConversion并定义扩展该超类的InchesToCentimeters,GallonsToLiters和MilesToKilometers对象

abstract class UnitConversion {
  def convert(x: Double): Unit
}
object InchToCen extends UnitConversion {
  def convert(x: Double): Unit = { println(x * 2.54) }
}
object GallToLiter extends UnitConversion {
  def convert(x: Double): Unit = { println(x * 3.8) }
}
object MileToCen extends UnitConversion {
  def convert(x: Double): Unit = { println(x * 1.6) }
}

3 定义一个扩展自java.awt.Point的Origin对象。为什么说这实际上不是个好主意?(仔细看Point类的方法)

import java.awt.Point
object origin extends java.awt.Point with App {
  println(origin.getLocation())
  println(new origin().getLocation)
  origin.setLocation(3, 2)
  origin.setLocation(origin) //这个方法就废了,自己玩自己 
}
class origin extends java.awt.Point {
} 

使用对象、类去扩展时,得到的都是Point对象,
4 定义一个Point类和一个伴生对象,使得我们可以不用new而直接用Point(3,4)来构造Point实例
apply方法的使用

import java.awt.Point
object origin extends java.awt.Point with App {
  def apply(x: Int, y: Int) = {
    new origin(x, y)
  }
  println(origin(3, 6).getLocation)
}
class origin extends java.awt.Point {
  def this(x: Int, y: Int) {
    this()
    this.x = x
    this.y = y
  }
}

5 编写一个Scala应用程序,使用App特质,以反序打印命令行参数,用空格隔开。举例来说,scala Reverse Hello World应该打印World Hello

object origin extends App {
  args.reverse.map { x => print(x + " ") }
}

6 编写一个扑克牌4种花色的枚举,让其toString方法分别返回♣,♦,♥,♠

object origin extends Enumeration with App {
  val a = Value("♣")
  val b = Value("♦")
  val c = Value("♥")
  val d = Value("♠")
  print(a)
}

7 实现一个函数,检查某张牌的花色是否为红色

  // 对Value集合起别名
  type CardColor = Value
  def f(color: CardColor) { // 直接通过color:Card.Value访问
    if (color == a) 0
  }
  f(Card.a)

8 编写一个枚举,描述RGB立方体的8个角。ID使用颜色值(例如:红色是0xff0000)

object RGB extends Enumeration with App {
  val RED = Value(0xff0000, "Red")
  val BLACK = Value(0x000000, "Black")
  val GREEN = Value(0x00ff00, "Green")
  val CYAN = Value(0x00ffff, "Cyan")
  val YELLOW = Value(0xffff00, "Yellow")
  val WHITE = Value(0xffffff, "White")
  val BLUE = Value(0x0000ff, "Blue")
  val MAGENTA = Value(0xff00ff, "Magenta")
  RGB.values.map { x => println(x.id + ":" + x) }
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值