今天看到一篇关于 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
var y = 0; var x = y = 1;
for( i <- 0 to 10 ) println(i);
在 scala 中对于不返回值的函数有特殊的表示法,若是函数体包含在花括号当中,可是没有前面的 = 号,那么返回类型就是 Unit,这样的函数就被称为过程(procedure),过程不返回值,咱们调用它仅仅是为了它的反作用
因为过程不返回任何值,因此咱们能够省略 = 号
因此知道了这一点后,咱们再来实现题中的要求
def coutdown(n : Int){ for( i <- (n + 1) until(0,-1)) println(i); }
注意这里不要写成 for(i <- 0 to 10)
,这样并不符合题意scala
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)