scala 系列20190202

今天看到一篇关于 scala 入门基础的提问点,我呢,就在这里简单作一下释疑,纯粹是为了抛砖引玉,特别期待各位同行的不吝赐教

我先来贴一下原帖的提问点:函数

  • 一、一个数字若是是正数,则它的 signum 为1;若是是负数,则 signum 为 -1;若是是0,则 signum 为0.编写一个函数来计算这个值
  • 二、一个空的块表达式{} 的值是什么?类型是什么?
  • 三、指出在 Scala 中何种状况下赋值语句 x=y=1 是合法的。(提示:给 x 找个合适的类型定义)
  • 四、针对下列 Java 循环编写一个 Scala 版 for(int i =10; i >= 0; i--) System.out.println(i);
  • 五、编写一个过程 countdown(n: Int),打印从 n 到 0 的数字
  • 六、编写一个 for 循环,计算字符串中全部字母的 Unicode 代码的乘积。举例来讲,“Hello” 中全部字符的乘积为 9415087488L
  • 七、一样是解决前一个练习的问题,但此次不使用循环(提示:在 Scaladoc 中查看 StringOps)
  • 八、编写一个函数 product(s: String),计算前面练习中提到的乘积
  • 九、把前一个练习中的函数改为递归函数
  • 十、编写函数计算 x^n,其中 n 是整数,使用以下的递归定义:
    x^n = y^2,若是 n 是正偶数的话,这里的 y = x^(n/2);
    x^n = x*x^(n-1),若是 n 是正奇数的话;
    x^0 =1;x^n = 1/x^(-n),若是 n 是负数的话;不得使用 return 语句

咱们一条一条来看一下:spa

  1. 这第一题我没大明白什么是 signum,因此这个先放下,留给各位同行大神来解答喽,恰好也给我讲讲哦,哈哈哈
  2. 图片描述
  3. 首先咱们知道,x=y=1 这是确定不对的,由于它其实是这样解析的 x=(y=1),而 y=1 是赋值语句,其返回值是 Unit,因此就至关因而将一个 Unit 赋给 x 了,可是文中又提示给 x 找个合适的类型定义,所以咱们只须要将 x 给声明为 var 类型便可 var y = 0; var x = y = 1;
  4. 这个嘛就比较简单了 for( i <- 0 to 10 ) println(i);
  5. 首先要说明一下什么是过程,它与函数有什么区别?
在 scala 中对于不返回值的函数有特殊的表示法,若是函数体包含在花括号当中,可是没有前面的 = 号,那么返回类型就是 Unit,这样的函数就被称为过程(procedure),过程不返回值,咱们调用它仅仅是为了它的反作用
因为过程不返回任何值,因此咱们能够省略 = 号
因此知道了这一点后,咱们再来实现题中的要求
def coutdown(n : Int){
    for( i <- (n + 1) until(0,-1)) println(i);
}

注意这里不要写成 for(i <- 0 to 10),这样并不符合题意scala

  1. 这道题也是有一个陷阱的,就是在声明 s 的时候必定要声明为 Long 型,只要知道这一点后,就比较简单了
def countUnicodeMutiple(str : String) = {
    var s : Long = 1;
    for(i <- str){
      s *= i.toInt;
      println(s);
    }
  }

而后调用便可code

后三道题我先放下,公司今天(2019年2月2日 16:39:45)走的都没人了,数我离家最远,属我最后一个离开,哎,我也写不下去了,要收拾收拾回家了(好难受,喜欢公司里的一个女的,可是人家特别讨厌我;不说了,明年见)递归

声明

原创手敲不易,转载请注明出处,谢谢。我是 拉丁小毛,欢迎你们关注我哦,一块儿交流,共同进步。有问题能够 邮我哦(util.you.com@gmail.com)
相关文章
相关标签/搜索