快学scala第八章习题答案

合集下载

快学Scala课后习题答案

快学Scala课后习题答案

快学Scala课后习题答案分享⼀个之前做快学Scala的课后习题(2-21章节,19⽆)的Github链接,我把习题的⽂字写在了每个回答的注释上⾯,这样⽅便⼤家对照着看,省的回过头去对照着pdf看了,如果有做的不对的地⽅希望⼤家给予指正。

举⼀个第⼆章节的例⼦,抛砖引⽟:object charpter02 {/** 2.1* ⼀个数字如果为正数,则它的signum为1;* 如果是负数,则signum为-1;* 如果为0,则signum为0.编写⼀个函数来计算这个值* */def signum(x: Int): Int = {if (x > 0) { 1 }else if (x < 0) { -1 }else { 0 }}def signum(x: Int): Int = if (x > 0) 1 else if (x < 0) -1 else 0;def signum(x: Int) = { if (x > 0) 1 else if (x < 0) -1 else 0 }def signum(x: Int) = if (x > 0) 1 else if (x < 0) -1 else 0/** 2.2* ⼀个空的块表达式{}的值是什么?类型是什么?* */// def checkEmptyBlockType() = {// println({});// println({}.getClass())// }def checkEmptyBlockType { println({}); println({}.getClass()) }/** 2.3* 指出在Scala中何种情况下赋值语句x=y=1是合法的。

* (提⽰:给x找个合适的类型定义)*/def checkAssignLegal { var x: Unit = () println("x's type is: " + x.getClass) var y = 1 x = y = 1}/** 2.4* 针对下列Java循环编写⼀个Scala版本:* for(int i=10;i>=0;i–) System.out.println(i);*/def ScalaForeach { // 1.to(10).reverse.foreach { (i: Int) => Predef.println(i) } // 1.to(10).reverse.foreach { i => Predef println i } // 1.to(10).reverse.foreach { i => println(i) } // 1.to(10).reverse foreach { println _ } (1 to 10 reverse) foreach println}/** 2.5* 编写⼀个过程countdown(n:Int),打印从n到0的数字*/def countdown(n: Int) { n match { case n if n >= 0 => { (0 to n reverse) foreach println } case n if n < 0 => { n to 0 foreach println } }}/** 2.6* 编写⼀个for循环,计算字符串中所有字母的Unicode代码的乘积。

C++程序设计习题答案第八章

C++程序设计习题答案第八章

第八章继承与多态习题一.基本概念与基础知识自测题8.1填空题8.1.1 如果类α继承了类β,则类α称为(1)类,而类β称为(2)类。

(3)类的对象可作为(4)类的对象处理,反过来不行,因为(5)。

如果强制转换则要注意(6)。

答案:(1)基类(2)派生类(3)派生类(4)基类(5)派生类有一些新成员(6)只能派生类强制转换为基类8.1.2 当用public继承从基类派生一个类时,基类的public成员成为派生类的(1)成员,protected成员成为派生类的(2)成员,对private成员是(3)。

公有派生可以使其类的(4),所以公有派生是主流。

答案:(1)public成员(2)protected成员(3)不可访问(4)接口不变8.1.3 利用继承能够实现(1)。

这种实现缩短了程序开发的时间,VC++中的(2)很好地体现了这一点。

答案:(1)代码的复用(2)MFC编程8.1.4 一个派生类只有一个直接基类的情况称为(1),而有多个直接基类的情况称为(2)。

继承体现了类的(3)概念,这在MFC中得到了很好表现,MFC中只采用了(4)。

答案:(1)单继承(2)多重继承(3)层次(4)单继承8.1.5 C++中多态性包括两种多态性:(1)和(2)。

前者是通过(3)实现的,而后者是通过(4)和(5)来实现的。

答案:(1)编译时的(2)运行时的(3)函数和运算符的重载(4)类继承关系(5)虚函数8.1.6 在基类中将一个成员函数说明成虚函数后,在其派生类中只要(1)、(2)和(3)完全一样就认为是虚函数,而不必再加关键字(4)。

如有任何不同,则认为是(5)而不是虚函数。

除了非成员函数不能作为虚函数外,(6)、(7)和(8)也不能作为虚函数。

答案:(1)同虚函数名(2)同参数表(3)同返回类型。

如基类中返回基类指针,而派生类中返回派生类指针是允许的(4)virtual(5)重载(6)静态成员函数(7)内联函数(8)构造函数8.1.7 纯虚函数定义时在函数参数表后加(1),它表明程序员对函数(2),其本质是将指向函数体的指针定为(3)。

快学scala第十五章习题答案

快学scala第十五章习题答案

16 注解16.1 编写四个JUnit测试用例,分别使用带或不带某个参数的@Test注解。

用JUnit执行这些测试import org.junit.Testclass ScalaTest {@Testdef test1(){print("test1")}@Test(timeout = 1L)def test2(){print("test2")}}16.2 创建一个类的示例,展示注解可以出现的所有位置。

用@deprecated作为你的示例注解。

@deprecatedclass Test{@deprecatedval t = _;@deprecated(message = "unuse")def hello(){println("hello")}}@deprecatedobject Test extends App{val t = new Test()t.hello()t.t}16.3 Scala类库中的哪些注解用到了元注解@param,@field,@getter,@setter,@beanGetter 或@beanSetter?看Scala注解的源码就OK了16.4 编写一个Scala方法sum,带有可变长度的整型参数,返回所有参数之和。

从Java调用该方法。

import annotation.varargsclass Test{@varargsdef sum(n:Int*)={n.sum}}public class Hello {public static void main(String[] args){Test t = new Test();System.out.println(t.sum(1,2,3));}}16.5 编写一个返回包含某文件所有行的字符串的方法。

从Java调用该方法。

import io.Sourceclass Test{def read()={Source.fromFile("test.txt").mkString}}public class Hello {public static void main(String[] args){Test t = new Test();System.out.println(t.read());}}16.6 编写一个Scala对象,该对象带有一个易失(volatile)的Boolean字段。

快速入门Scala编程语言

快速入门Scala编程语言

快速入门Scala编程语言Scala编程语言是一种多范式编程语言,结合了面向对象编程和函数式编程的特点。

它的语法简洁优雅,适合用于大规模的软件开发项目。

本文将带你快速了解Scala编程语言。

一、Scala的基本语法1. 变量和常量:在Scala中,使用关键字`var`来声明一个可变的变量,使用关键字`val`来声明一个不可变的常量。

例如,`var x = 10`声明一个可变变量x,`val y = 5`声明一个不可变常量y。

2. 数据类型:Scala拥有丰富的数据类型,包括整数类型、浮点数类型、布尔类型、字符类型等。

例如,`Int`表示整数类型,`Double`表示浮点数类型,`Boolean`表示布尔类型,`Char`表示字符类型。

3. 控制流语句:Scala支持常见的控制流语句,如条件判断和循环。

例如,`if-else`语句用于条件判断,`for`循环用于迭代执行操作。

4. 函数:在Scala中,函数是一等公民,可以作为值进行传递和操作。

函数的定义使用关键字`def`,例如`def add(x: Int, y: Int): Int = x + y`定义了一个接受两个整数参数并返回它们的和的函数。

5. 类和对象:Scala是一种面向对象的语言,每个值都是一个对象。

类用于定义对象的蓝图,对象是类的实例。

通过使用`class`关键字定义类,使用`new`关键字来创建对象。

二、函数式编程特性Scala内置了许多函数式编程特性,使得函数的组合和操作更加简洁和灵活。

1. 高阶函数:Scala中的函数可以作为值进行传递和操作,因此可以使用函数作为参数或返回值。

这种函数接受其他函数作为参数或将函数作为返回值的函数称为高阶函数。

高阶函数可以极大地简化代码的编写和理解。

2. 不可变性:Scala鼓励使用不可变的数据结构和变量,在处理数据时避免副作用和数据竞争的发生。

不可变性使得代码更加安全和易于调试。

3. 模式匹配:模式匹配是一种强大的功能,用于根据数据的结构和属性进行分支处理。

第8章课后习题解答

第8章课后习题解答

课后习题1.在Unity3D物理系统的Rigidbody组件中,要想使物体受空气阻力影响,应该给(B )赋予一定的值。

A.Mass B.Drag C.Angular Drag D.Use Gravity 解析:Rigid body组件中,Mass用于设置游戏对象的质量;Drag当游戏对象受力运动时,受到的空气阻力;Angular Drag用于当游戏对象受扭矩力旋转时,受到的控制阻力;Use Gravity用于控制物体受到重力影响。

2.在Unity3D物理系统的Rigidbody组件中,Is Kinematic的作用是(A)。

A.游戏对象是否遵循运动学物理定律B.物体运动插值模式C.碰撞检测模式D.对刚体运动的约束解析:Is Kinematic参数开启后游戏对象将不再受物理引擎的影响,从而只能通过Transform属性来对其操作。

3.在Unity3D物理系统的Cloth组件中,(A)可以设定布料的抗拉伸程度。

A.Stretching Stiffness B.Bending StiffnessC.Use Tethers D.Use Gravity解析:Stretching Stiffness用于设置布料的抗拉伸程度,数值在0-1之间,值越大越不容易拉伸;Bending Stiffness用于设置布料的抗弯曲程度,数值在0-1之间,值越大越不容易弯曲;Use Tethers若启用此项,则可以防止布料点延展过度;Use Gravity若启用此项,则布料会受到重力的影响。

4.在Unity3D物理系统的Cloth组件中,(B)可以设置增加的碰撞粒子质量的多少。

A.Friction B.Collision Mass ScaleC.Use Continuous Collision D.Use Virtual Particles解析:Friction是用于设置布料的摩擦系数,取值在0-1之间;Collision Mass Scale用于设置组成布料碰撞体的粒子质量的缩放系数;Use Continuous Collision用于控制是否使用连续碰撞检测来达到布料碰撞的稳定性;Use Virtual Particles控制是否使用虚拟粒子来达到布料碰撞的稳定性。

快学scala第八章习题答案

快学scala第八章习题答案

9 继承9.1 扩展如下的BankAccount类,新类CheckingAccount对每次存款和取款都收取1美元的手续费class BankAccount(initialBalance:Double){private var balance = initialBalancedef deposit(amount:Double) = { balance += amount; balance}def withdraw(amount:Double) = {balance -= amount; balance}}9.2 扩展前一个练习的BankAccount类,新类SavingsAccount每个月都有利息产生(earnMonthlyInterest方法被调用),并且有每月三次免手续费的存款或取款。

在earnMonthlyInterest方法中重置交易计数。

9.3 翻开你喜欢的Java或C++教科书,一定会找到用来讲解继承层级的实例,可能是员工,宠物,图形或类似的东西。

用Scala来实现这个示例。

Thinking in Java中的代码Java代码9.4 定义一个抽象类Item,加入方法price和description。

SimpleItem是一个在构造器中给出价格和描述的物件。

利用val可以重写def这个事实。

Bundle是一个可以包含其他物件的物件。

其价格是打包中所有物件的价格之和。

同时提供一个将物件添加到打包当中的机制,以及一个适合的description方法9.5 设计一个Point类,其x和y坐标可以通过构造器提供。

提供一个子类LabeledPoint,其构造器接受一个标签值和x,y坐标,比如:new LabeledPoint("Black Thursday",1929,230.07)9.6 定义一个抽象类Shape,一个抽象方法centerPoint,以及该抽象类的子类Rectangle和Circle。

scala课后习题答案

scala课后习题答案

scala课后习题答案Scala课后习题答案Scala是一种多范式编程语言,它结合了面向对象编程和函数式编程的特性。

在学习Scala的过程中,做课后习题是非常重要的,它可以帮助我们巩固所学的知识,提高编程能力。

下面我们来看一些常见的Scala课后习题及其答案。

1. 编写一个函数,计算给定数组的平均值。

```scaladef average(arr: Array[Int]): Double = {if (arr.isEmpty) 0else arr.sum.toDouble / arr.length}```2. 编写一个函数,将给定的字符串列表连接成一个字符串。

```scaladef concatStrings(strings: List[String]): String = {strings.mkString}```3. 编写一个函数,找出给定数组中的最大值和最小值。

```scaladef findMaxAndMin(arr: Array[Int]): (Int, Int) = {(arr.max, arr.min)}```4. 编写一个函数,将给定的整数列表按照奇偶分成两个列表。

```scaladef splitOddEven(nums: List[Int]): (List[Int], List[Int]) = {nums.partition(_ % 2 == 0)}```5. 编写一个递归函数,计算给定数字的阶乘。

```scaladef factorial(n: Int): Int = {if (n <= 1) 1else n * factorial(n - 1)}```以上是一些常见的Scala课后习题及其答案,通过做这些习题可以帮助我们更好地理解和掌握Scala编程语言。

希望大家在学习Scala的过程中能够多加练习,不断提升自己的编程能力。

第八习题参考答案

第八习题参考答案

第八章习题 (P170)8.12 某分组码的校验矩阵为011100101010111⎡⎤⎢⎥=⎢⎥⎢⎥⎣⎦H ,(1) n=?, k=? 该码的码字有多少?(2) 该码的生成矩阵;(3)矢量010111和100011是否为码字? 解:(1) 校验矩阵为()n k n -⨯矩阵,故n=6,k=3; 该码的码字有23=8个;(2) 10001101010101110⎡⎤⎢⎥=⎢⎥⎢⎥⎣⎦G ; (3) (010111)(010)(000)T T T ⋅=≠H ,故(010111)不是码字;(100011)(000)TT⋅=H ,故(100011)是码字。

8.13 某二元(n , k )系统线性分组码的全部码字如下:00000,01011,10110,11101。

(1) n=?, k=? (2) 该码的生成矩阵G 和校验矩阵H 。

解:(1) (n, k)线性分组码的码字有2k 个。

24k =,故k =2;码长为5,因此n =5;(2) 因为该码为系统码,故码的前2位对应信息位,后3位对应校验位,由系统码的特点,生成矩阵的两行分别为消息序列(10)和(01)所对应的码字,故生成矩阵和校验矩阵分别为101100111⎡⎤=⎢⎥⎣⎦G ,10100110100101⎡⎤⎢⎥=⎢⎥⎢⎥⎣⎦H 8.14已知一个线性分组码的校验矩阵为011110010110101111H ⎡⎤⎢⎥=⎢⎥⎢⎥⎣⎦,试求其生成矩阵。

当输入序列为1001 1100 1101时,求编码器输出的码字序列。

解:由校验矩阵和生成矩阵的关系可得1000011010010100101100001111⎡⎤⎢⎥⎢⎥=⎢⎥⎢⎥⎣⎦G 由G c u =⋅,消息序列为1001 1100 1101时,对应的码字序列为1001100 1100110 1101001。

8.15 设一个(7,4)分组码的生成矩阵为10001110100101001001101110G ⎡⎤⎢⎥⎢⎥=⎢⎥⎢⎥⎣⎦。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

9 继承
9.1 扩展如下的BankAccount类,新类CheckingAccount对每次存款和取款都收取1美元的手续费class BankAccount(initialBalance:Double){
private var balance = initialBalance
def deposit(amount:Double) = { balance += amount; balance}
def withdraw(amount:Double) = {balance -= amount; balance}
}
9.2 扩展前一个练习的BankAccount类,新类SavingsAccount每个月都有利息产生(earnMonthlyInterest方法被调用),并且有每月三次免手续费的存款或取款。

在earnMonthlyInterest方法中重置交易计数。

9.3 翻开你喜欢的Java或C++教科书,一定会找到用来讲解继承层级的实例,可能是员工,宠物,图形或类似的东西。

用Scala来实现这个示例。

Thinking in Java中的代码
Java代码
9.4 定义一个抽象类Item,加入方法price和description。

SimpleItem是一个在构造器中给出价格和描述的物件。

利用val可以重写def这个事实。

Bundle是一个可以包含其他物件的物件。

其价格是打包中所有物件的价格之和。

同时提供一个将物件添加到打包当中的机制,以及一个适合的description方法
9.5 设计一个Point类,其x和y坐标可以通过构造器提供。

提供一个子类LabeledPoint,其构造器接受一个标签值和x,y坐标,比如:new LabeledPoint("Black Thursday",1929,230.07)
9.6 定义一个抽象类Shape,一个抽象方法centerPoint,以及该抽象类的子类Rectangle和Circle。

为子类提供合适的构造器,并重写centerPoint方法
9.7 提供一个Square类,扩展自java.awt.Rectangle并且是三个构造器:一个以给定的端点和宽度构造正方形,一个以(0,0)为端点和给定的宽度构造正方形,一个以(0,0)为端点,0为宽度构造正方形
9.8 编译8.6节中的Person和SecretAgent类并使用javap分析类文件。

总共有多少name的getter方法?它们分别取什么值?(提示:可以使用-c和-private选项)
总共两个。

Person中取得的是传入的name,而SecretAgent中取得的是默认的"secret"
9.9 在8.10节的Creature类中,将val range替换成一个def。

如果你在Ant子类中也用def的话会有什么效果?如果在子类中使用val又会有什么效果?为什么?
在Ant中使用def没有问题。

但是如果使用val则无法编译。

因为val只能重写不带参数的def。

这里的def是带参数的
9.10 文件scala/collection/immutable/Stack.scala包含如下定义:
class Stack[A] protected (protected val elems: List[A])
请解释protected关键字的含义。

(提示:回顾我们在第5章中关于私有构造器的讨论)
此构造方法只能被其子类来调用,而不能被外界直接调用。

相关文档
最新文档