开发者学堂课程【Scala 核心编程-基础:作业点评】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/609/detail/8896
作业评讲
目录
一、做作业的目的
二、作业讲解
一、做作业的目的
学习任何一个技术,如果不去做作业,那这个技术肯定是驾驭不了的,所以练习是非常重要的。题做多了自然看到这个题目就反应过来该怎么做。
二、作业讲解
1、在 Scala REPL(read->evaluateion->print->loop)中,计算3的平方根,然后再对该值求平方。现在,这个结果与3相差多少?
提示: scala.math 找相应的方法
Math 是数学的意思,这里面提供了大量相关数学的一些方法,比如求平方或者平方根等。
打开 Scala Standard Library 2.11.8手册,输入 math,看到这里面有一个 scala.math 包,点击进去,然后,按 ctrl+f 键,输入 sqrt,找到对应方法,
返回 double value 的平方根。要的就是它。
其实这是一个包对象里面包含的方法。
打开 REPL 运行窗口编辑:
scala〉 scala.math.sqrt(3)
res0: Double = 1.7320508075688772
scala〉 res0 * res0
res1: Double = 2.999999999999996
scala> 3 - res1
res2: Double = 4.440892098500626E-16
scala>
回车看到对应结果。
scala.math.sqrt(3)是计算3的平方根。默认分配一个变量 res0来接收3的平方根的值。再求平方后,看到结果有精度的损失。
2、Scala 语言的 sdk 是什么?
SDK 主要是明确一个概念,开发工具包。
3、Scala 环境变量配置及其作用。
配一个 Scala_home,然后再配一个 pass
4、Scala 程序的编写、编译、运行步骤是什么?能否一步执行?
5、Scala 程序编写的规则。
需要注意的是:语句后面无需带分号,但是带上也不会错。
6、简述:在配置环境、编译、运行各个步骤中常见的错误
7、如何检测一个变量是 val 还是 var?
思路:定义一个 val 和 var 变量,然后通过赋值可以看出。Val 是不能再重新赋值的,var 是可以反复的赋值。例:
scala> val num1 = 10
num1: Int = 10
scala> nun1 = 20
Kconsole>:12: error: reassignment to val
Num = 20
scala> var num2 = 20
num2: Int = 20
scala> num2 = 40
nun2: Int = 40
scala>
可以看到,val 不可以重复赋值,会报错。var 可以重复赋值。
8、Scala 允许用数字去乘-个字符串,去 REPL 中试一下"crazy"*3。 这个操作做什么?在 Scaladoc 中如何找到这个操作?
去查手册,找一个字符串乘以三会得到什么结果?然后找到它的出处。
(1)在 REPL 中编辑计算
scala> "crazy"* 3
res3: String = crazycrazycrazy
scala>
"crazy"*3就是这个字符串乘以3,得三个同样的字符串。
(2)在 Scaladoc 中找 String
打开 Scala Standard Library 2.11.8手册,
① 作为一个程序员,肯定会条件反射的去找 string,但是没有找到直接的 string。
图中可发现有两个非常可疑或者相似的,WrappedSting,就是包装的 Sting。WrappedSting 跟传统 String 很相似。点击进去,往下拉看有没有类似的方法。
在图中,Value Members 目录下就有 def *(n: Int): String,这就是乘法。Return the current string concatenated n times.
返回连接 n 次的当前字符串。
② 也可以从 StringOps 里找到这个方法。同样在 Value Members 目录下就可以找到 String 方法。
9、10 max2的含义是什么? max 方法定义在哪个类中?
(1)返回的值:
scala〉10 max 2
res4: Int = 10
scala> 10 max 90
res5: Int = 90
scala>
这里可以看出,10 max 2就是返回两个数中的最大值。
上面的写法也可以这样写10.max(2)。两种写法在 Scala 里面是通用的。
scala> 10.max(20)
res6:Int = 20
scala> 10.max(1)
res7: Int = 10
scala>
(2) 正常的思维可能是在 Int 这个类里找。打开 Scala Standard Library 2.11.8手册,搜 Int,点击进去,然后,按ctrl+f 键,输入 max,
就直接找到了。是 Int 类。同样在 RichInt 中也找到。
10、用 BigInt 计算2的1024次方
提示:在 BigInt 找相应的方法
根据提示先到 BigInt 找有没有相应的方法。打开 Scala Standard Library 2.11.8手册,搜 BigInt,在 scala.math里。点击进去,然后,按 ctrl+f 键,输入 pow,
可以看到 BigInt 相应的方法似 pow。
scala> val num3 = new BigInt(2)
:11: error: type mismatch;
found : Int(2)
required: java.math.BigInteger
val num3 = new BigInt(2)
scala> val num3 = BigInt(2)
num3: scala.math.BigInt = 2
scala>scala> nun3.pow(1024)res8:scala.math.BigInt=179769313486231590772930519078902473361797697894230657273430081157732675805500963132708477322407536021120113879871393357658789768814416622492847430639474124377767893424865485276302219601246094119453082952085005768838150682342462881473913110540827237163350510684586298239947245938479716304835356329624224137216
scala>
输入 val num3 = new BigInt(2),回车会报错。val num3 = BigInt(2)这里没有 new,直接用类名构建实例,用的是BigInt 里的 apply 方法。用 num3调用 pow 方法,就出结果,很大的数。比较大的数可以用 BigInt。
另一种方式,可以简写为:scala> BigInt (2) pow(1024) 也是可行的。构建匿名的对象。然后用 pow 计算出结果。
前一种方式更好理解。
11、在 Scala 中如何获取字符串“Hello”的首字符和尾字符?
提示: 在String 中找相应的方法
打开 Scala Standard Library 2.11.8手册,搜 String,在 WrappedSting 里找。点击进去,按 ctrl+f 键输入 take,
看到 take 方法,这个方法就是选择前 n 个元素。
字符串的本质实际上是字符数组。由多个字符构成的一个数组。
例1:取首字符两种方法
scala> "hello".take(0)
res10: String = ""
scala> "hello".take(1)
res11: String = h
scala> "he11o"(0)
res12: Char = h
scala>
一般认为 hello 字符里的 h 是在下标0位,但 take(0)并不能取出 h,说明0不代表取出第一个字符。用 take(1)就能取出 h。
另一种方法,字符串 hello 是一个数组,直接使用"he11o"(0),也可以取出 h。这种方式比较传统,类似于 Java里下标0位代表第一个取出。
例2:
scala> "he11o".take ("he1lo".length)
res13: String = hello
length 这种方式从0到最后全部取出。不符合题意。
例3:
scala> "he11o".reverse
res14: String = olleh
Reverse 这种方式将整个字符串反转位置
例4:取尾字符方法1
scala> "he11o".reverse.take(1)
res15 : String = o
先用 Reverse 这种方式将整个字符串反转位置。然后再用 take(1)取出反转后的第一位。
例5:取尾字符方法2
Take 相当于从左边开始取。在编程语言里也会有从右边开始取的。
scala> "he11o".takeRight(1)
res16: String = o
takeRight 方式也能取出 o





