scala习题精选100道解答

本文是Scala编程习题的精选集,涵盖了从基本概念到高级特性的多种题目,包括REPL的使用、数值类型、函数、数组操作、Map与集合操作、字符串处理、模式匹配、正则表达式等内容,旨在帮助读者深入理解Scala语言。
摘要由CSDN通过智能技术生成

scala习题精选100道

 

1、关于和Scala进行交互的基本方式REPL说法错误的是? C

A、R 读取(read)

B、E 求值(evaluate)

C、P 解析(Parse)

D、L 循环(Loop)

P不是解析,而是表示打印Print

 

2、不属于Scala7种数值类型的是? D

A、Char

B、Int

C、Float

D、LongLong

只有Long,没有longlongscala支持的数据类型如下

Byte        8位有符号补码整数。数值区间为 -128 127

Short      16位有符号补码整数。数值区间为 -32768 32767

Int 32位有符号补码整数。数值区间为 -2147483648 2147483647

Long        64位有符号补码整数。数值区间为 -9223372036854775808 9223372036854775807,可以加Ll后缀

Float        32IEEE754单精度浮点数,可以加Ff后缀

Double   64IEEE754单精度浮点数

Char        16位无符号Unicode字符, 区间值为 U+0000 U+FFFF

String      字符序列

Boolean          truefalse,注意这里是小写

Unit         表示无值,和其他语言中void等同。用作不返回任何结果的方法的结果类型。Unit只有一个实例值,写成()

Null          null 或空引用

Nothing           Nothing类型在Scala的类层级的最低端;它是任何其他类型的子类型。

Any         Any是所有其他类的超类

AnyRef   AnyRef类是Scala里所有引用类(reference class)的基类

 

 

3、如果需要使用scala库中的sqrt函数,如sqrt(2),下列引用包的方式错误的是? B

A、import scala.math._

B、import sqrt

C、import math._

D、import math.sqrt

导入库时候scala可以省略,但是下一级就不能再省略。默认情况下,Scala 总会引入 java.lang._ scala._ Predef._,这里也能解释,为什么以scala开头的包,在使用时都是省去scala.的。

 

4、Scala关于变量定义、赋值,错误的是?B

A、val a = 3

B、val a:String = 3

C、var b:Int = 3 ; b = 6

D、var b = "Hello World!" ; b = "123"

虽然scala会自己解析类型,但3这种明显不是string类型

 

5、在Scala中如何获取字符串”Hello”的首字符和尾字符?B

A、"Hello"(0),"Hello"(5)

B、"Hello".take(1),"Hello".reverse(0)

C、"Hello"(1),"Hello"(5)

D、"Hello".take(0), "Hello".takeRight(1)

应该是"Hello"(0)"Hello"(4)

"Hello".take(1)表示取左边开始1个字符,2表示取2

Reverse表示取反,然后(0)表示头一个,

 

6、下面输出与其他不一致的是?D

A、println("Hello World")

B、print("Hello World\n")

C、printf("Hello %s", "World\n")

D、val w = "World" ; println("Hello $w")

val w = "World" ; println(s"Hello $w")才能打印正确

 

7、关于函数def sum(args:Int*) = {var r = 0 ; for(arg <- args) r += arg ; r}} 输出结果不一致的是?D

A、sum(1,2,3)

B、sum(6)

C、sum(2,4)

D、sum(1,1,1,2)

Sum是求和功能,所以D不一致; Scala允许你指明函数的最后一个参数可以是重复的,即我们不需要指定函数参数的个数,可以向函数传入可变长度参数列表。Scala 通过在参数的类型之后放一个星号来设置可变参数(可重复的参数)

 

8、下列表达式不是过程的是?C

A、def foo(num:Int) = {println(num * 2)}

B、def foo() {println("Hello World")}

C、def foo(num:Int) = {num * 2}

D、def foo():Unit = {println("Hello World")}

C是单纯取值,其他有打印的过程

 

9、下列数组定义与其他不一致的是?D

A、val a = Array[Int](0, 0)

B、val a = Array(0, 0)

C、val a = new Array[Int](2)

D、val a = Array[Int](1, 1)

D是初始化为(1,1),其他都是初始化为(0,0)

 

10、下列关于数组缓冲val b = ArrayBuffer[Int]()操作结果的注释说明错误的是?C

A、b += 1 // b 等于 ArrayBuffer(1)

B、b += (1,2,3) // b 等于 ArrayBuffer(1,2,3)

C、b += Array(1,2) // b 等于 ArrayBuffer(1,2)

D、b += (1,2,3,4,5);b.trimEnd(3) // b 等于 ArrayBuffer(1,2)

应该为b ++= Array(1,2),scala++=常用于对更大等级数据,比如

val buf = new StringBuilder;

buf += 'a'

buf ++= "bcdef"

 

11、关于数组的常用算法,下列说法错误的是?B

A、Array(1,7,2,9).sum // 等于 19

B、Array(1,7,2,9).sorted // 等于 Array(9,7,2,1)

C、Array("one","two","three").max // 等于 "two"

D、Array("one","two","three").mkString("-") // 等于 "one-two-three"

Sort是按递增排序,字符串求序是按字典序,mkString是把集合转成字符串,可以带一个分隔符参数

 

12、关于元组 Tuple 说法错误的是?D

A、元组的可以包含不同类型的元素

B、元组是不可变的

C、访问元组第一个元素的方式为 pair._1

D、元组最多只有2个元素

集合类通过_访问,是从1开始

Scala设计元组最多可以支持到22个元素

 

13、对于函数

def getGoodsPrice(goods:String) = {

val prices = Map(“book” -> 5, “pen” -> 2, “sticker” -> 1)

prices.getOrElse(goods, 0)

}

结果说法错误的是?D

A、getGoodsPrice("book") // 等于 5

B、getGoodsPrice("pen") // 等于 2

C、getGoodsPrice("sticker") // 等于 1

D、getGoodsPrice("sock") // 等于 “sock”

因为没有sock,所以getOrElse就走到0

 

14、对于元组val t = (1, 3.14, "Fred")说法错误的是?A

A、t_1 等于 1

B、t 的类型为 Tuple3[Int, Double, java.lang.String]

C、val (first, second, _) = t // second 等于 3.14

D、t._0无法访问, 会抛出异常

t_1缺了小数点如t._1,或者需要空格t _1

String是从java导入,不是scala自带的

val (first, second, _) = t也是一种模式匹配,对比_方式可读性更好

t._0返回空,不会异常

 

15、对于拉链操作val t1 = Array(1, 3); val t2 = Array(2,4) ; t1.zip(t2)返回结果正确的是?C

A、(1,2,3,4)

B、((1,3),(2,4))

C、((1,2),(3,4))

D、((1,4),(3,4))

也可以写成t1 zip t2

 

16、Scala允许你用数字去乘字符串—去REPL中试一下"crazy"*3。这个操作结果返回什么?C

A、”crazy”*3

B、ccrraazzyy

C、crazycrazycrazy

D、crazy

  • 14
    点赞
  • 136
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值