Scala学习(二)练习


Scala控制结构和函数&练习

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

简单逻辑判断:

测试结果如下:

Scala中已经有此方法了,如下:

println(BigInt(10).signum)

测试结果如下:

2. 一个空的快表达式{}的值是什么,类型是什么

在REPL中测试如下:

由此可以看出,它的值是()类型是Unit

3. 在Scala中何种情况下赋值语句x=y=1是合法的。(提示:给x找个合适的类型定义)

由于在scala中的赋值语句是Unit类型,所以只要x为Unit类型就可以了。测试如下:

在此,再次证证明了{}是Unit类型

4. 针对下列Java循环编写一个Scala版本: for(int i=10;i>=0;i–) System.out.println(i);

Scala版本for循环如下:

for(i <- 0 to 10 reverse )
print(i+"\t")

测试结果如下:

10    9    8    7    6    5    4    3    2    1    0

5. 编写一个过程countdown(n:Int),打印从n到0的数字

函数代码如下:

def countdown(n:Int){

0 to n reverse foreach print

}

测试结果如下:

6. 编写一个for循环,计算字符串中所有字母的Unicode代码的乘积。举例来说,"Hello"中所有字符串的乘积为9415087488L

程序代码如下:

var t:Long=1

for(ch <- "Hello"){

t=t*ch

}

测试结果:

7. 同样是解决前一个练习的问题,但这次不使用循环。(提示:在Scaladoc中查看StringOps)

通过查看Scaladoc可查看到foreach方法:

var t:Long=1

"Hello".foreach(t*=_)

测试结果如下:

8. 编写一个函数product(s:String),计算前面练习中提到的乘积

函数代码如下:

def product(str:String):Long={

var t:Long=1

str.foreach(t*=_)

t

}

测试结果如下:

9. 把前一个练习中的函数改成递归函数

递归代码如下:

def product(str:String):Long={

if(str.length==1)

str.charAt(0).toLong

else

str.charAt(0)*product(str.drop(1))

}

测试结果:

10. 编写函数计算xn,其中n是整数,使用如下的递归定义:

■xn=y2,如果n是正偶数的话,这里的y=x(n/2)

■xn = x*x(n-1),如果n是正奇数的话

■x0 = 1

■xn = 1/x(-n),如果n是负数的话

不得使用return语句

程序代码如下:

def xn(x : Double ; n : Int) : Double={

if (n==0)

1

else if (n <0)

1/xn(x,-n)

else if (n%2==0)

xn(x,n/2)* xn(x,n/2)

else

x*xn(x,n-1)

}

测试结果:

如果,您认为阅读这篇博客让您有些收获,不妨点击一下右下角的【推荐】。
如果,您希望更容易地发现我的新博客,不妨点击一下左下角的【关注我】。
如果,您对我的博客所讲述的内容有兴趣,请继续关注我的后续博客,我是【Sunddenly】。

本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

时间: 2024-12-20 10:46:08

Scala学习(二)练习的相关文章

Scala学习(二)--- 控制结构和函数

控制结构和函数 摘要: 本篇主要学习在Scala中使用条件表达式.循环和函数,你会看到Scala和其他编程语言之间一个根本性的差异.在Java或C++中,我们把表达式(比如3+4)和语句(比如if语句)看做两样不同的东西.表达式有值,而语句执行动作.在Scala中,几乎所有构造出来的语法结构都有值.这个特性使得程序更加精简,也更易读.本篇的要点包括: 1. 表达式有值 2. 块也有值,是它最后一个表达式的值 3. Scala的for循环就像是"增强版"的Java for循环 4. 分号

scala学习(二)

接着上次的学习,今天学习scala的下面内容咯~~ 1·使用集(set)和映射(map) 学习过java的童鞋们,看见这两个肯定很开心咯,因为很眼熟哦. scala的集合,分为可变类型和不可变类型.array--可变:list保持不变 那么set和map呢,他们通过类继承的差别控制可变和不可变~~ 先看个set的列子吧: var jetSet = Set("zhangsan","lisi") jetSet += "wangwu" println(

[Python 学习] 二、在Linux平台上使用Python

这一节,主要介绍在Linux平台上如何使用Python 1. Python安装. 现在大部分的发行版本都是自带Python的,所以可以不用安装.如果要安装的话,可以使用对应的系统安装指令. Fedora系统:先以root登入,运行 yum install python Ubuntu系统:在root组的用户, 运行 sudo apt-get install python 2. 使用的Python的脚本 Linux是一个以文件为单位的系统,那么我们使用的Python是哪一个文件呢? 这个可以通过指令

Scala学习笔记及与Java不同之处总结-从Java开发者角度

Scala与Java具有很多相似之处,但又有很多不同.这里主要从一个Java开发者的角度,总结在使用Scala的过程中所面临的一些思维转变. 这里仅仅是总结了部分两种语言在开发过程中的不同,以后会陆续更新一些切换后在开发过程中值得注意的地方.以下列举了部分,但令人印象深刻的Scala语言的不同之处,具体的代码演示样例及具体阐述见下文. ? Scala中可直接调用Java代码,与Java无缝连接. 语句能够不用";"结束.且推荐不适用";". 变量声明时以var或va

Scala学习笔记-环境搭建以及简单语法

关于环境的搭建,去官网下载JDK8和Scala的IDE就可以了,Scala的IDE是基于Eclipse的. 下面直接上代码: 这是项目目录: A是scala写的: package first import scala.collection.mutable.ListBuffer object A { def main(args: Array[String]) { print("Hello,Scala");//学习程序设计的第一句 println("---");//pr

Spark之Scala学习

1. Scala集合学习: http://blog.csdn.net/lyrebing/article/details/20362227 2. scala实现kmeans算法 http://www.thinksaas.cn/group/topic/93852/ 3. Spark之Scala学习网站 http://spark.apache.org/docs/latest/mllib-decision-tree.html 4. Spark wordcount开发并提交到集群运行: http://ww

OpenCV for Python 学习 (二 事件与回调函数)

今天主要看了OpenCV中的事件以及回调函数,这么说可能不准确,主要是下面这两个函数(OpenCV中还有很多这些函数,可以在 http://docs.opencv.org/trunk/modules/highgui/doc/user_interface.html 找到,就不一一列举了),然后自己做了一个简单的绘图程序 函数如下: cv2.setMouseCallback(windowName, onMouse[, param]) cv2.createTrackbar(trackbarName,

scala学习(一)

开始学习scala,有一种学习java的感觉. 首先,从网站下载scala的包,下载后要安装,安装后把安装目录的bin放到环境变量psth里 cmd里,输入scala,如果出现下图,那么恭喜咯,安装成功咯~~ 1:变量 首先我们看下定义变量方法 var 可以定义变量,可以改变值 val 定义的变量不可以改变值,类似于java的final变量: 2:函数 如图定义了一个函数 def max(x:Int,y:Int):Int ={ if(x>y)x else y } def:表面定义函数 max :

Makefile持续学习二

Makefile概述 一.Makefile里有什么? Makefile里主要包含5个东西:显式规则.隐晦规则.变量定义.文件指示和注释 1.显式规则:显式规则说明如恶化生成一个或多的目标文件,包含要生成的文件,文件的依赖文件,生成的命令 2.隐晦规则:由make自动推动功能完成 3.变量定义:变量一般都是字符串,类似C语言中的宏定义,当Makefile被执行时,其中的变量都会被扩展到相应的引用位置上 4.文件指示: 在一个Makefile中引用另一个Makefile 根据某些情指定Makefil