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. SQL Server 临时表和表变量系列之选择篇

    原文地址:https://yq.aliyun.com/articles/69187 摘要: # 摘要 通过前面的三篇系列文章,我们对临时表和表变量的概念.对比和认知误区已经有了非常全面的认识.其实,我 ...

  2. ISP与DSP的区别【转】

    https://www.cnblogs.com/lifan3a/articles/5006760.html ISP 是Image Signal Processor 的简称,也就是图像信号处理器.而DS ...

  3. Android (checkBox)

    1.使用 setOnCheckedChangeListener()方法对checkBox进行事件监听 2.重写方法 public void onCheckedChanged(CompoundButto ...

  4. Request获取客户端IP

    获取客户端的IP地址的方法是:request.getRemoteAddr() ,这种方法在大部分情况下都是有效的.但是在通过了Apache,Squid等反向代理软件就不能获取到客户端的真实IP地址了. ...

  5. WampServer 安装使用详解

    WampServer集成环境的搭建.安装.使用.配置 什么是WampServer WampServer是一款由法国人开发的Apache Web服务器.PHP解释器以及MySQL数据库的整合软件包.免去 ...

  6. CentOS7搭建OpenVPN

    目录 CentOS7搭建OpenVPN 环境 安装 第一步.安装openvpn及所需软件 第二步.编辑vars文件,根据自己环境配置 第三步.创建服务端证书及key 第四步.创建客户端证书 第五步.拷 ...

  7. Eclipse中定位当前文件在项目中的位置

    点击红色框内的按钮,就能定位当前文件在项目中的位置, 另外, 找到位置后记得再点击一下这个按钮, 要不然每次打开一个文件都会自动定位

  8. 【Beta阶段】测试报告

    兼容性测试   功能 描述 效果 Chrome浏览器 FireFox浏览器 IE浏览器 搜狗浏览器 主页实用小工具按钮 跳转到实用小工具首页 跳转到实用小工具首页 ü ü ü ü 鼠标移动到逐差法计算 ...

  9. 指令计数器--Program counter

    别名:指令指针.指令地址寄存器.程序计数器: 操作:顺序操作(计数器加一).分支操作(计数器修改): The program counter (PC), commonly called the ins ...

  10. JavaScript中的typeof操作符用法实例

    在Web前端开发中,我们经常需要判断变量的数据类型.鉴于ECMAScript是松散类型的,因此需要有一种手段来检测给定变量的数据类型——typeof就是负责提供这方便信息的操作符.   对一个值使用t ...