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

object Conversions {
    def main(args: Array[String]){
        printf("1 inch = %g centimeters\n", inchesToCentimeters(1))
        printf("2 gallons = %g liters\n", gallonsToLiters(2))
        printf("3 miles = %g centimeters\n", milesToKilometers(3))
    }
    def inchesToCentimeters(inches:Double)={
        inches * 2.54
    }
    def gallonsToLiters(gallons:Double)={
        gallons * 3.7854118
    }
    def milesToKilometers(miles:Double)={
        miles * 1.609344 
    }
}
 
/*result
1 inch = 2.54000 centimeters
2 gallons = 7.57082 liters
3 miles = 4.82803 centimeters
*/
 
2. 前一个练习不是很面向对象。提供一个通用的超类UnitConversions并定义扩展该超类的inchesToCentimeters、gallonsToLiters和milesToKilometers对象。
abstract class UnitConversions{
    def convert(amt:Double): Double
}
 
object inchesToCentimeters extends UnitConversions{
    override def convert(amt:Double)= amt * 2.54  
}
object gallonsToLiters extends UnitConversions{
    override def convert(amt:Double)= amt * 3.7854118 
}
object milesToKilometers extends UnitConversions{
    override def convert(amt:Double)= amt * 1.609344 
}
 
printf("1 inch = %g centimeters\n", inchesToCentimeters.convert(1))
printf("2 gallons = %g liters\n", gallonsToLiters.convert(2))
printf("3 miles = %g centimeters\n", milesToKilometers.convert(3))
 
/*result
1 inch = 2.54000 centimeters
2 gallons = 7.57082 liters
3 miles = 4.82803 centimeters
*/
 
3. 定义一个扩展自java.awt.Point的Origin对象。为什么说这实际上不是个好主意?(仔细看Point类的方法。)
 
Point类中的getLocation方法返回的是Point对象,如果想返回Origin对象,需要Origin类才行。
import java.awt._
 
object Origin extends Point{
    override def getLocation:Point = super.getLocation
}
 
Origin.move(2,3)
println(Origin.toString)
 
/*result
Main$$anon$1$Origin$[x=2,y=3]
*/
 
4.   定义一个Point类和一个伴生对象,使得我们可以不用new而直接用Point(3, 4)来构造Point实例。
class Point private(val x:Int, val y:Int){
    override def toString = "Point at [x=%d,y=%d]".format(x,y)
}
 
object Point{
    def apply(x:Int, y:Int) = new Point(x,y)
}
 
val = Point(3,4)
println(a.toString)
 
/*result
Point at [x=3,y=4]
*/
 
5. 编写一个Scala应用程序,使用App特质,以反序打印命令行参数,用空格隔开。举例来说,scala Reverse Hello World应该打印出World Hello。
object Reverse{
    def main(args:Array[String]){
        for(i <- (0 until args.length).reverse) print(args(i) + " ")
    }
}
/* The following code did not work for me. 
object Reverse extends App{
    for(i <- (0 until args.length).reverse) print(args(i) + " ")
}
*/
 
/*result
World Hello
*/
 
6. 编写一个扑克牌4种花色的枚举,让其toString方法分别返回♠♥♦或♣。
object Poker extends Enumeration with App{
    val Heart = Value(3"")
    val Diamond = Value(4"")
    val Club = Value(5"")
    val Spade = Value(6"")
     
     
    println(Poker.Heart)
    println(Poker.Diamond)
    println(Poker.Club)
    println(Poker.Spade)
 
}
 
7. 实现一个函数,检查某张牌的花色是否为红色。
object Card extends Enumeration with App{
    val Heart = Value(3"")
    val Diamond = Value(4"")
    val Club = Value(5"")
    val Spade = Value(6"")
     
    def color(c: Card.Value){
        if(c == Card.Club || c == Card.Spade) print("Black")
        else print("Red")
    }
 
    color(Card.Heart)
}
 
/*
Red
*/
 
 
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 YELLO = Value(0xffff00,"Yellow")
    val WHITE = Value(0xffffff,"White")
    val BLUE = Value(0x0000ff,"Blue")
    val MAGENTA = Value(0xff00ff,"Magenta")
}
 

快学Scala 第6章 对象 - 练习的更多相关文章

  1. 《快学Scala》第二章 控制结构和函数

  2. 《快学Scala》第一章 基础

  3. 快学Scala习题解答—第一章 基础

    1 简介 近期对Scala比较感兴趣,买了本<快学Scala>,感觉不错.比<Programming Scala:Tackle Multi-Core Complexity on th ...

  4. 《快学Scala》

    Robert Peng's Blog - https://mr-dai.github.io/ <快学Scala>Intro与第1章 - https://mr-dai.github.io/S ...

  5. 快学Scala 第十九课 (trait的abstract override使用)

    trait的abstract override使用: 当我看到abstract override介绍的时候也是一脸懵逼,因为快学scala,只介绍了因为TimestampLogger中调用的super ...

  6. 快学Scala 第十三课 (类型层级,对象相等性)

    Scala 类型层级: 对象相等性: 和Java一样要重写equals方法和hashcode方法 class Student(val id: Int, val name: String) { over ...

  7. 《快学Scala》第六章 对象 第七章 包和引入

  8. 快学Scala习题解答—第四章 映射和元组

    4 映射和元组  4.1 设置一个映射,当中包括你想要的一些装备,以及它们的价格.然后构建还有一个映射.採用同一组键,可是价格上打9折 映射的简单操作  ,"gun"->18 ...

  9. 快学scala习题解答--第五章 类

    5 类  5.1 改进5.1节的Counter类,让它不要在Int.MaxValue时变成负数 class Count{ private var value = Int.MaxValue else v ...

随机推荐

  1. Python之turtle画同心圆和棋盘

    画饼图 import turtle t = turtle.Pen() for i in range(5): t.penup() t.goto(0, -i*30) t.pendown() t.circl ...

  2. 当 return 遇到 try

    . . . . . 今天有同事和我探讨在群里看到的一道有趣的题目,在探讨的过程中让我搞清楚了一些曾经模糊的概念,特此记录下来. 题目给出如下代码,问运行后打印的结果是什么. public static ...

  3. 具体解释MVP矩阵之ViewMatrix

    矩阵推导 ViewMatrix用于直接将World坐标系下的坐标转换到Camera坐标系下.已知相机的坐标系.还有相机在世界空间下的坐标.就能够求出ViewMatrix.以下进行具体推导. 令UVN为 ...

  4. 【iCore4 双核心板_uC/OS-II】例程八:消息邮箱

    一.实验说明: 消息邮箱是uC/OS-II中的另一种通信机制,可以使一个任务或者中断服务子程序向另一个任务发送一个指针型的变量.通常该指针指向一个包含了“消息”的特定数据结构.   二.实验截图:   ...

  5. 查看和修改 mysql库、表、字段编码

    查看编码 查看数据库编码. show variables like '%char%'; 查看表编码 show create table <表名>; 例:show create table ...

  6. 【分享】Vue 资源典藏(UI组件、开发框架、服务端、辅助工具、应用实例、Demo示例)

    Vue 资源典藏,包括:UI组件 开发框架 服务端 辅助工具 应用实例 Demo示例 element ★11612 - 饿了么出品的Vue2的web UI工具套件 Vux ★7503 - 基于Vue和 ...

  7. 居于U2000手机管理光猫,小区运营商FTTH光猫注册神器,MA5680T手机管理,自动添加光猫

    此软件居于U2000开发,需要U2000管理支持 主要功能: 光猫查看->上线情况.下线原因.下线时间.光猫重启.光模块发送功能.接收功能.温度 Radius诊断->用户基本信息.拨打电话 ...

  8. Manual Validation with Data Annotations C#对实体类进行手动验证

    Several people have asked me about using data annotations for validation outside of a UI framework, ...

  9. eclipse 查看变量或方法在什么地方被调用的快捷键和快速显示方法入参提示信息

    为了用eclipse写代码的时候,不用方向键移动光标,可以设置如下快捷键, Line Up:Alt+i   光标向上 Line Down:Alt+k 光标向下 Line Start:Alt+u  移到 ...

  10. SQL开头quoted和ansiNULL

    “QUOTED_IDENTIFIER” 当 SET QUOTED_IDENTIFIER 为 ON 时,标识符可以由双引号分隔,而文字必须由单引号分隔. 当 SET QUOTED_IDENTIFIER ...