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) }
}