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包下的类即可 ,这里不一一列举了