第一章 基础 A1
1. 在Scala REPL中键入3,然后按下TAB键,有哪些方法可被应用?
2. 在Scala中,计算3的平方根,然后再对该值求平方,现在这个值与3相差多少?
答案:引入scala的数据函数需要引入math包,有两种方式
//方式一
improt math._
val result = 3-pow(sqrt(3),2)
//方式二位
val result = 3-math.pow(math.sqrt(3),2)
3. res变量是val 还是var?
通过测试,我们发现res2不可以被赋值,因此为不可以变变量,所以答案是val
4. Scala允许你使用数据乘以字符串----去REPL中试一下“crazy” * 3 ,这个操作做什么,在Scaladoc中如何找到这个操作?
使用zeal,下载scala的官方文档,字符串的操作是在StringOps这个类中,查找对应的类,会列出该类的方法,如下,在该类的第一个方法,就是* 代表的方法。返回值为 返回链接了n词的字符串。
在scala.collection.StringOps这个类中,可以找到对应方法
5. 10 max 2 的含义是什么,max方法在哪个类中?
10 max 2 的含义是 10.max(2) 。实际是10调用了Int类中的max方法。
6. 用BigInt计算2的1024次方。
//在Scaladoc中可以查到BigInt有pow的方法,但是使用数据无法直接调用,因此做法如下
val result = BigInt(2).pow(1024)
7. 为了在使用probablePrime(100,Random)获取随机素数时,不在probablePrime和Random之前使用任务限定符,你需要引入什么?
用过Scaladoc查询,可以找到 probalePrime方法在BigInt类中,Random类在math.util包中,因此代码如下
import scala.util.Random
import scala.math.BigInt
val result = BigInt.probablePrime(100,new Random())
8. 创建随机文件的方法之一是生成一个随机的BigInt,然后将它转化为三十六进制,输出类似“lkdsjfapasoer6385askdjf”这样的字符串。查阅Scaladoc找到在Scala中实现该逻辑的方法。
//使用上步骤的结果,转化乘十六进制
import scala.util.Random
import scala.math.BigInt
val result1 = BigInt.probablePrime(100,new Random()).toString(36)
9. 在Scala中如何获取字符串的首字符和尾字符?
//获取字符串首字符的方法有两种
val first1 = "hello".head
val first2 = "hello".take(1)
//获取尾字符的方法是
val tail1 = "hello".takeRight(1)
10. take,drop,takeRight和dropRight这些字符串函数是做什么用的,和subString相比,他们有什么优点和缺点?
take(n:Int) return A string containing the first n chars of this string. 获取从第一个字符到第n个字符的一个字符串
drop (n:Int) The rest of the string without its n first chars. 返回去除首字符到第n个字符之外的字符串
takeRight(n: Int) A string containing the last n chars of this string. 返回包含最后n个字符的字符串
dropRight(n: Int) The rest of the string without its n last chars. 返回没有最后n个字符的字符串
substring(start: Int, end: Int)
Returns a new String made up of a subsequence of this sequence, beginning at the start index (inclusive) and extending to the end index (exclusive).
target.substring(start, end) is equivalent to target.slice(start, end).mkString
返回新的string,这个string有开始的索引值结束的索引结束
substring(start: Int, end: Int) 可以*的截取字符串任意位置,但是上面的方法截取非首尾位置时候,需要使用多次。