《快学Scala》第二章练习题答案+概述

第二章

***内容概述

  • if表达式也是有值的
    val  x = if(x>0) 1 else -1
    
  • 块也有值-是它最后一个表达式
    val value= {
    	val x = 10 - 20
    	val y = 10 + 20
    	(x * y)
    }
    value = -300
    
  • Sala的for循环就像是java“增强for”循环
    for(x <- 0 to 10){
       print(x)
    }
    
  • 分号(大多数情况下不是必须的)
  • void类型是Unit
  • 避免在函数表达是中使用return
    这位大佬记载了为什么 https://blog.csdn.net/wang_wbq/article/details/80231895
  • 异常工作方式和java中的基本一样,不同的是你在catch语句中使用的“模式匹配”
  • Scala中没有受检异常

***习题

  1. 如果一个数字为正数,则它的signum为1;如果是负数,则signum为-1;如果是0,则signum是0, 编写一个函数来计算这个值

    def problem_1(num: Int): Int = {
        if (num > 0) 1 else if (num == 0) 0 else -1
      }
    
  2. 一个空的块表达式的值是什么?它的类型是什么

    值是(),类型是Unit
    
  3. 指出Scala何种情况下赋值语句x=y=1是合法的

    在x的类型为Unit的情况下是合法的
    
  4. 针对下列java循环编写一个scala版

    
    //答案一
     def problem_4(): Unit = {
        var i = 10
        while (i >= 0) {
          println(i)
          i = i - 1
        }
      }
    //答案二
    //def problem_4(): Unit = {for(x <- (0 to 10).reverse){println(x)}}
    
    
  5. 编写一个过程countdown(n:Int),打印从n到0的数字

     def countdown(n: Int): Unit = {
        var i = n
        while (i >= 0) {
          println(i)
          i = i - 1
        }
      }
    
  6. 编写一个for循环,计算字符串中所有字母的unicode代码的乘积 举例来说,"Hello"中所有字母的字符成为9415087488L

     def problem_6(input: String): BigInt = {
        var sum: BigInt = 1
        val length = input.length
        for (i <- 0 to length - 1) {
          sum = sum * input(i).toLong
        }
        sum
      }
    
  7. 同样是解决6的问题,但不能够用循环(提示,StringOps)

    def problem_7(input: String): BigInt = {
        var sum: BigInt = 0
        sum = input.map(_.toLong).product
        sum
    }
    
  8. 把前一个练习的函数改为递归函数

    def problem_9(input: String, curIndex: Int): BigInt = {
    	    if (curIndex == input.length - 1) {
    	      input(curIndex).toLong
    	    } else {
    	      problem_9(input, curIndex + 1) * input(curIndex).toLong
    	    }
      }
    
  9. 编写函数计算x 的n次方

     def problem_10(x: Double, n: Int): BigDecimal = {
 	    if (n == 0) {
 	      1
 	    } else if (n < 0) {
 	      1 / problem_10(x, -1 * n)
 	    } else if (n % 2 == 1) {
 	      x * problem_10(x, n - 1)
 	    } else {
 	      problem_10(x, n / 2) * problem_10(x, n / 2)
 	    }
 	  }
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
快学Scala PDF第二版》是一本非常实用的Scala编程入门指南。本书涵盖了Scala的基本概念、核心语法、函数式编程、面向对象编程、并发编程等多个方面的内容,适合初学者和有一定编程基础的读者阅读。 本书第一部分介绍了Scala的基本概念和语法,包括变量、数据类型、函数、类和对象等内容,帮助读者快速入门并掌握Scala的基础知识。第二部分介绍了Scala的函数式编程特性,包括高阶函数、匿名函数、闭包等,帮助读者理解函数式编程的思想和应用。第三部分介绍了Scala的面向对象编程特性,包括类的定义、继承、多态等,帮助读者掌握面向对象编程的基本原理和技巧。第四部分介绍了Scala的并发编程特性,包括并发基础、线程、并发集合等,帮助读者理解并发编程的概念和应用。 本书还通过大量实例和案例帮助读者加深对Scala的理解和掌握,让读者能够通过实际练习提升编程能力。此外,本书还介绍了Scala的一些高级特性和应用场景,如模式匹配、解构、隐式转换等,帮助读者更深入地学习和应用Scala编程语言。 总的来说,《快学Scala PDF第二版》是一本很不错的Scala编程入门书籍,内容丰富、通俗易懂,适合广大学习者阅读。希望读者能够通过阅读本书,快速掌握Scala编程的基础知识,并能够灵活运用到实际项目去。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值