• Scala学习(六)练习


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

    运行结果:

    15英尺= 457.2

    15加仑= 56.78117676

    15公里= 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. }

    运行结果:

    10英尺= 304.8 厘米

    10加仑= 37.85311784

    10公里= 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】。

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

  • 相关阅读:
    iNeuOS工业互联网系统,一键部署,5分钟内开箱即用
    演讲的要义
    在MyBatis中实现动态表名
    Pandora Boot和Spring Boot
    java对象克隆以及深拷贝和浅拷贝
    超级快的端口扫描工具blackwater
    webgl智慧楼宇发光系列之线性采样下高斯模糊
    canvas可视化效果之内阴影效果
    图表绘制之RepeatNode的妙用
    【ECUG】十四年如一日,有这样一群初心不改的技术人
  • 原文地址:https://www.cnblogs.com/sunddenly/p/4432754.html
Copyright © 2020-2023  润新知