欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

快学Scala 第七章 包和引入 课后答案

程序员文章站 2022-06-14 22:10:07
...
1. 编写示例程序,展示为什么
package com.horstmann.impatient   不同于 
package com
package horstmann
package impatient
//可以引用父包中的类,和父包的父包中的类
package com{
  class Animal(){}

  package horstmann{
    class Dog(a :Animal){}

    package impatient{
      class Male(a:Animal,d:Dog){}
    }
  }
}

//只可以引用同级包中的类
package com.horstmann.impatient{

  class Female(m:Male){}
}

2. 编写一段让你的Scala朋友们感到困惑的代码,使用一个不在顶部的com包
//可以引用父包中的类,和父包的父包中的类
package com{
  class Animal(){}

  package horstmann{
    class Dog(a :Animal){}

    package impatient{
      class Male(a:Animal,d:Dog){}
    }
  }
}

import com._
class Female(a:Animal)

3. 编写一个包random,加入函数nextInt():Int,nextDouble():Double,setSeed(seed:Int):Unit。生成随机数的算法采用线性同余生成器:
//03
package random{
  package object random{

    var seed:Int =_
    val a=BigDecimal(1664525)
    val b = BigDecimal(1013904223)
    val n = 32

    def nextInt()={
      val tmp = (seed * a +b)% math.pow(2,n)
      tmp.toInt
    }

    def nextDouble()={
      val tmp = (seed * a +b)% math.pow(2,n)
      tmp.toInt.toDouble
    }

  }
}
4. 在你看来Scala的设计者为什么要提供 package object语法而不是让你将函数和变量添加到包中?

因为jvm虚拟机的局限导致

5. private[com] def giveRaise(rate:Double)的含义是什么?有用吗?
//该方法在com的上层包中可见
6. 编写一段程序将Java哈希映射中的所有元素拷贝到Scala哈希映射,用引入语句重命名这两个类
import java.util.{HashMap => JavaHashMap}
import scala.collection.mutable

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

    val javaHashMap = new JavaHashMap[String,String]()
    val scalaHashMap = new mutable.HashMap[String,String]()

    javaHashMap.put("zhangsan","1")
    javaHashMap.put("lisi","2")
    javaHashMap.put("wangwu","3")

    val keys: Array[AnyRef] = javaHashMap.keySet().toArray

    for(key <- keys){
      scalaHashMap += (key.toString -> javaHashMap.get(key))
    }

    println(scalaHashMap.mkString(","))
  }
}
7. 在前一个练习中,将所有语句移动到尽可能小的作用域里面。
object Demo01 {
  def main(args: Array[String]): Unit = {

    val javaHashMap = new java.util.HashMap[String,String]()
    val scalaHashMap = new collection.mutable.HashMap[String,String]()

    javaHashMap.put("zhangsan","1")
    javaHashMap.put("lisi","2")
    javaHashMap.put("wangwu","3")

    val keys: Array[AnyRef] = javaHashMap.keySet().toArray

    for(key <- keys){
      scalaHashMap += (key.toString -> javaHashMap.get(key))
    }

    println(scalaHashMap.mkString(","))
  }
}

8. 一下的Java代码是什么,这是个好的主意吗?
import java._
import javax._

//这个代码的意思是导入java和javax下面的所有类,而java和javax下面都是包,没有类,所以这个代码是没有用的
9. 编写一段程序,引入java.lang.System类,从user.name系统属性读取用户名,从Console对象读取一个密码,如多密码不是secret.则在标准错误流中打印一个消息;如果密码是“secret”,则在标准的输出流中打印出一个问候消息。不要使用任何其他引入,也不要使用任何限定词(带句点的那种)
def main(args: Array[String]): Unit = {
   val password: String = Console.readLine()

    if("secret" == password) println("hello" + System.getProperty("user.name")) else System.err.println("secret err!")

  }
10. 处理StringBuilder,还有哪些java.lang成员是被scala包覆盖的?

直接比对java.lang下的类和scala包下的类即可

相关标签: Scala