快学scala习题(七)-----包
来源:互联网 发布:js给div设置id 编辑:程序博客网 时间:2024/06/02 21:02
1.编写示例程序展示为什么
package com.horseman.impatient不同于
package com
package horseman
package impatient
第一种方式中,T3可以访问T1,T2类package com{ class T1{ } package horseman{ class T2{ } package impatient{ class T3(t1:T1,t2:T2){ } } }}第二种方式则访问不了package com.horseman.impatient{ class T4(t3:T1){ }}
2.编写一个令人困惑的scala 代码,使用一个不再顶部的com包,需要注意的是包的引入可以在程序的任意位置,并且引入最上级的包并不能使用子包中元素
package com{ class T1{ } package horseman{ class T2{ } package impatient{ class T3(t1:T1,t2:T2){ } } }}import com._;class TT(t2:T1){}
3.编写一个包random,加入函数nextInt():Int,nextDouble():Double 和 SetSeed(seed:Int):Unit,生成随机数的算法采用线性同余生成器
线性同余生成器算法如下
Nj+1= (A * Nj + B ) mod M
将seed当做首值,A,B,M均为固定值,这里取A= 1664525,B=1013904223,n = 2的32次方
package random{package object random{ val A=math.BigDecimal(1664525); val b=math.BigDecimal(101304223); val M=math.BigDecimal(2).pow(32); var lastvalue=0; def nextInt():Int={ val ranInt=((lastvalue *A+b)%M).toInt; lastvalue=ranInt; lastvalue; } def SetSeed(seed:Int){ this.lastvalue=seed; } def nextDouble():Double={ val ranDouble=((lastvalue *A+b)%M); lastvalue=ranDouble.toInt; ranDouble.toDouble; }}}object packageTest extends App { override def main(args:Array[String]){ import random._; random.SetSeed(111); println(random.nextInt()); println(random.nextInt()); println(random.nextDouble()); println(random.nextDouble()); }}
4.在你看来scala设计者为什么要提供package object而不是简单的将函数和变量添加到包中
因为java的虚拟机不支持。。。。
5.private[com] def giveRaise(rate: Double)的含义是什么?有用吗?
此方法仅在com包中可见,有用,可以定义包的可见性
6.编写一段程序,将java哈希映射中的所有元素拷贝到scala哈希映射。用引入语句重命名这两个类。
import java.util.{HashMap => javaHashMap}import scala.collection.mutable.HashMap;object packageTest extends App { override def main(args:Array[String]){ import random._; random.SetSeed(111); println(random.nextInt()); println(random.nextInt()); println(random.nextDouble()); println(random.nextDouble()); val map:javaHashMap[String,Int]=new javaHashMap[String,Int](); map.put("zacks",1); map.put("cloud",2); map.put("tifa",3); val setmap=JavaCopyToScalaHashMap(map); setmap.foreach(println) } def JavaCopyToScalaHashMap(map:javaHashMap[String,Int]):HashMap[String,Int]={ var setmap=new HashMap[String,Int](); for(key<- map.keySet().toArray()){ setmap+=(key.toString() -> map.get(key)); } setmap; }
7.在前一个练习中将所有引入语句引入到尽可能小的作用域里
大致就是在需要用到的地方引用,引用语句在任何地方都可以使用
3.import java.util.{HashMap => JavaHashMap} 4. 5. val map = new JavaHashMap[String,String]() 6. map.put("1","a") 7. map.put("2","b") 8. map.put("3","c") 9. 10. import scala.collection.mutable.HashMap 11. 12. val smap = new HashMap[String,String]() 13. 14. for(key <- map.keySet().toArray){ 15. smap += (key.toString -> map.get(key)) 16. } 17. 18. println(smap.mkString)
8.以下代码的作用是什么?这是个好主意吗?
import java._
import javax._
作用是引入java,javax包下的所有内容,但java和javax下并没有任何类,所以此语句并没有啥卵用
9.编写一段程序,引入java.lang.System类,从user.name系统属性读取用户名,从Console对象读取一个密码,如果密码不是”secret”,则在标准错误流中打印一个消息;如果密码是”secret”,则在标准输出流中打印一个问候消息。不要使用任何其他引入,也不要使用任何限定词(带句点的那种)
val Map:scala.collection.Map[String,String]=System.getProperties(); Map.foreach((f:(String,String)) => if(f._1=="user.name") println(f._2)); val passwd=Console.readLine(); if(passwd=="secret"){ println("welcome back"+Map.get("user.name")); }else{ System.err.println("passwd error"); }
10.除了StringBuilder,还有那些java.lang的成员被scala所包含
直接比对java.lang下的类和scala包下的类即可 ,这里不一一列举了
- 快学scala习题(七)-----包
- 快学scala习题(二)
- 快学scala习题(一)
- 快学scala习题(三)
- 快学scala习题(四)
- 快学scala习题(五)
- 《快学Scala》习题详解 第7章 包
- 快学Scala--第一章习题
- 《快学Scala》习题一
- 快学Scala学习笔记及习题解答(5-8类、对象、包和继承)
- 快学Scala习题答案(第12章高阶函数)
- 《快学Scala》16章习题参考解答(XML)
- 快学Scala 第三章习题答案
- 快学Scala 第四章习题答案
- 快学Scala 第六章习题答案
- 快学Scala--第二章习题
- 快学Scala 第三章习题答案
- 快学Scala 第四章习题答案
- Struts2文件下载时,中文文件名和chorm不兼容问题
- EditText在Dialog中得到焦点并全部选中且弹出软件键盘
- hdu_1455_sticks
- HD_1247Hat’s Words (字典树)
- codeforces 416D Population Size
- 快学scala习题(七)-----包
- Day 26: TogetherJS —— 让我们一起来编程!
- 网站整合CKEditor和CKFinder(Java版)
- java 字符串比较诡异状况
- C语言中的类型转换!
- Java基础
- 关于keystone的一些问题:stop:unknow instance或unable to establish connection to http://controller:35357/v2.0/
- 子数组最大乘积
- HDU 1285 确定比赛名次(拓扑排序)