Scala中的对象&练习

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

程序代码:

  1. object Conversions {
  2.   private val i2c=30.48
  3.   private val g2l=3.785411784
  4.   private val m2k=1.609344
  5.   def inchesToCentimeters(inch:Double):Double={
  6.     inch*i2c
  7.   }
  8.   def gallonsToLiters(gallon:Double):Double={
  9.     gallon*g2l
  10.   }
  11.   def milesTokilometers(mile:Double):Double={
  12.     mile*m2k
  13.   }
  14.   def main(args: Array[String]): Unit = {
  15.     val inch=15
  16.     val gallon=15
  17.     val mile=15
  18.     println(inch+"英尺= "+inchesToCentimeters(inch))
  19.     println(gallon+"加仑= "+gallonsToLiters(gallon))
  20.     println(mile+"公里= "+milesTokilometers(mile))
  21.   }
  22. }

运行结果:

英尺= 457.2

加仑= 56.78117676

公里= 24.14016

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

程序代码:

  1. abstract class UnitConversion {
  2.   def Converse(from:Double):Double
  3. }
  4. object inchesToCentimeters extends UnitConversion{
  5.   private val i2c=30.48
  6.   override def Converse(inche:Double):Double={
  7.     inche*i2c
  8.   }
  9. }
  10. object gallonsToLiters extends UnitConversion{
  11.   private val g2l=3.785311784
  12.   override def Converse(gallon:Double):Double={
  13.     g2l*gallon
  14.   }
  15. }
  16. object milesToKilometers extends UnitConversion{
  17.   private val m2k=1.609344
  18.   override def Converse(mile:Double):Double={
  19.     m2k*mile
  20.   }
  21. }
  22. object Test{
  23.   def main(args: Array[String]): Unit = {
  24.     val inche=10; val gallon=10; val mile=10
  25.     println(inche+"英尺= "+inchesToCentimeters.Converse(inche)+"厘米")
  26.     println(gallon+"加仑= "+gallonsToLiters.Converse(gallon)+"升")
  27.     println(mile+"公里= "+milesToKilometers.Converse(mile)+"公里")
  28.   }
  29. }

运行结果:

英尺= 304.8 厘米

加仑= 37.85311784 升

公里= 16.09344 公里

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

描述:Point中的getLocation方法返回的是Point对象,如果想返回Origin对象,需要Origin类才行。Point有move方法,setLocation方法。这些作为Origin(原 点) 来说,都不是很合适

程序代码:

import java.awt.Point

object Origin extends Point with App{

override def getLocation:Point=super.getLocation()

Origin.move(2, 3)

println(Origin.toString())

}

4.  定义一个Point类和一个伴生对象,使得我们可以不用new而直接用Point(3,4)来构造Point实例

描述:apply方法使用

程序代码:

class Point(x:Int,y:Int) {

override def toString():String="x= "+x+" y= "+y

}

object Point extends App{

def apply(x:Int,y:Int)={

new Point(x,y)

}

val p=new Point(3,4)

println(p)

}

运行结果:

x= 3 y= 4

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

程序代码:

object Reverse extends App{

for(str <- args.reverse)

println(str+" ")

}

运行结果:

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

描述:这四个花色的符号win下选输入法的特殊符号软键盘。在lin下可以用vim。在vim中输入:dig可以找到分别对应cS,cH,cD,cC。进入vim插入模式按<CTRL-K>,然后分别输入即可

程序代码:

object PokerFace extends Enumeration {

type PokerFace=Value

val SPADES=Value("♠")

val HEARTS=Value("♥")

val DIAMONDS=Value("♢")

val CLUBS=Value("♧")

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

for(poker <- PokerFace.values)

println(poker)

}

}

运行结果:

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

程序代码:

  1. object Card extends Enumeration with App{
  2.   val SPADES=Value("?")
  3.   val HEARTS=Value("?")
  4.   val DIAMONDS=Value("?")
  5.   val CLUBS=Value("?")
  6.   type Card=Value
  7.   def color(c:Card)={
  8.     if(c==Card.HEARTS||c==Card.DIAMONDS)
  9.       println("Red")
  10.      else
  11.        println("Black")
  12.   }
  13.   color(SPADES)
  14.   color(DIAMONDS)
  15. }

运行结果:

Black

Red

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

描述:RGB如果分别用8位表示,红是0xff0000,绿是0x00ff00,蓝是0x0000ff。以此类推 ,8个顶点分别是(0,0,0) (0,0,1) (0,1,0) (0,1,1) (1,0,0) (1,0,1) (1,1,0) (1,1,1)

程序代码:

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

}

如果,您认为阅读这篇博客让您有些收获,不妨点击一下右下角的【推荐】。
如果,您希望更容易地发现我的新博客,不妨点击一下左下角的【关注我】。
如果,您对我的博客所讲述的内容有兴趣,请继续关注我的后续博客,我是【Sunddenly】。

本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

Scala学习(六)练习的更多相关文章

  1. Scala学习六——对象

    一.本章要点 用对象作为但例或存放工具的方法 类可以拥有一个同名的伴生对象 对象可以扩展类或特质 对象的apply方法通常用来构造伴生类的新实例 如果不想显示定义main方法,可以扩展App特质的对象 ...

  2. Scala学习(六)---Scala对象

    Scala中的对象 摘要: 在本篇中,你将会学到何时使用Scala的object语法结构.在你需要某个类的单个实例时,或者想为其他值或函数找一个可以挂靠的地方时,你就会用到它.本篇的要点包括: 1. ...

  3. 【Scala】Scala学习资料

    Scala学习资料 java 树形 分类器_百度搜索 决策树分类器-Java实现 - CSDN博客 KNN分类器-Java实现 - CSDN博客 学习:java设计模式—分类 - 飞翔荷兰人 - 博客 ...

  4. Scala学习资源

    Scala学习资源: Scala官方网站:http://www.scala-lang.org/ Scala github:https://github.com/scala/scala Twitter ...

  5. 【Todo】【读书笔记】大数据Spark企业级实战版 & Scala学习

    下了这本<大数据Spark企业级实战版>, 另外还有一本<Spark大数据处理:技术.应用与性能优化(全)> 先看前一篇. 根据书里的前言里面,对于阅读顺序的建议.先看最后的S ...

  6. Hbase深入学习(六) Java操作HBase

    Hbase深入学习(六) ―― Java操作HBase 本文讲述如何用hbase shell命令和hbase java api对hbase服务器进行操作. 先看以下读取一行记录hbase是如何进行工作 ...

  7. TweenMax动画库学习(六)

    目录            TweenMax动画库学习(一)            TweenMax动画库学习(二)            TweenMax动画库学习(三)            Tw ...

  8. 机器学习(三)--- scala学习笔记

    Scala是一门多范式的编程语言,一种类似Java的编程语言,设计初衷是实现可伸缩的语言.并集成面向对象编程和函数式编程的各种特性. Spark是UC Berkeley AMP lab所开源的类Had ...

  9. SVG 学习<六> SVG的transform

    目录 SVG 学习<一>基础图形及线段 SVG 学习<二>进阶 SVG世界,视野,视窗 stroke属性 svg分组 SVG 学习<三>渐变 SVG 学习<四 ...

随机推荐

  1. 浅谈 Mysql 中的索引

    文章归属:http://feiyan.info/16.html,我想自己去写了,但是发现此君总结的非常详细.直接搬过来了 关于MySQL索引的好处,如果正确合理设计并且使用索引的MySQL是一辆兰博基 ...

  2. JavaScript大杂烩14 - 使用JQuery(上)

    JQuery意义 - Why? 为什么要使用JQuery,从我个人来说,就是这么几点:简化代码 + 统一行为 + 功能强大 + 搭配方便. 简化代码是从写代码的角度来说的,实现同样的功能,如果用Jav ...

  3. Django之验证

    1. 滑动验证码补充说一下 极验科技:https://docs.geetest.com/install/deploy/server/python#下载SDK按照人家的实例操作即可 1.pip inst ...

  4. [20171223]grid用户的环境变量问题.txt

    [20171223]grid用户的环境变量问题.txt --//oracle 11G 安装RAC,一般需要建立grid用户,使用这个用户管理asm,群集信息.--//在安装过程中,同事的疑问实际上也是 ...

  5. word中从正文开始编码的方法

    假如第1页和第2页是首页和目录,你想从第3页的正文开始设置页码 1. 将光标移到第二页的最后位置,点击插入“分隔符”,选择“分节类型”的“下一页”,确定.这时光标自动移到第三页. 2. 点击插入页码, ...

  6. Asp.Net配置不允许通过url方式访问目录下的资源

    Asp.Net网站发布后,有部分文件为了安全性,是不能直接通过url访问获取 通常有2种做法: 1.将文件目录建立在 App_code 或者App_Data 等默认的隐藏目录下 2.将文件的目录添加到 ...

  7. linux内存源码分析 - SLAB分配器概述【转】

    本文为原创,转载请注明:http://www.cnblogs.com/tolimit/ 之前说了管理区页框分配器,这里我们简称为页框分配器,在页框分配器中主要是管理物理内存,将物理内存的页框分配给申请 ...

  8. Deepin中设置文件或文件夹权限

    Deepin中设置文件或文件夹权限 -R 递归进行某项操作,不论是删除文件夹或者修改文件夹下所有文件权限   权限更改,777相当于完全控制权限: 更改一个文件夹或文件的权限:chmod 777 文件 ...

  9. javascript中DOM0,DOM2,DOM3级事件模型解析

    DOM 即 文档对象模型. 文档对象模型是一种与编程语言及平台无关的API(Application programming Interface),借助于它,程序能够动态地访问和修改文档内容.结构或显示 ...

  10. 【转】.htaccess详解及.htaccess参数说明

    .htaccess文件(或者”分布式配置文件”)提供了针对目录改变配置的方法, 即,在一个特定的文档目录中放置一个包含一个或多个指令的文件, 以作用于此目录及其所有子目录.作为用户,所能使用的命令受到 ...