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】。

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

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

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

    控制结构和函数 摘要: 本篇主要学习在Scala中使用条件表达式.循环和函数,你会看到Scala和其他编程语言之间一个根本性的差异.在Java或C++中,我们把表达式(比如3+4)和语句(比如if语句 ...

  2. Scala学习二十二——定界延续

    一.本章要点 延续让你可以回到程序执行当中之前的某个点; 可以在shift块中捕获延续 延续函数一直延展到包含它的reset块的尾部 延续所谓的”余下的运算“,从包含shift的表达式开始,到包含它的 ...

  3. Scala学习二十一——隐式转换和隐式参数

    一.本章要点 隐式转换用于类型之间的转换 必须引入隐式转换,并确保它们可以以单个标识符的形式出现在当前作用域 隐式参数列表会要求指定类型的对象.它们可以从当前作用域中以单个标识符定义的隐式对象的获取, ...

  4. Scala学习二十——Actor

    一.本章要点 每个actor都要扩展Actor类并提供act方法 要往actor发送消息,可以用actor!message 消息发送是异步的:”发完就忘“ 要接受消息,actor可以调用receive ...

  5. Scala学习二——控制结构和函数

    一.if表达式有值 val s=if(x>0) 1 else -1,相当于Java中x>0?1:-1(不过不拿呢个在?:中插入语句),而且Scala中可以用混合类型(如if (x>0 ...

  6. SpringCloud学习(二):微服务入门实战项目搭建

    一.开始使用Spring Cloud实战微服务 1.SpringCloud是什么? 云计算的解决方案?不是 SpringCloud是一个在SpringBoot的基础上构建的一个快速构建分布式系统的工具 ...

  7. 机器学习(三)--- scala学习笔记

    Scala是一门多范式的编程语言,一种类似Java的编程语言,设计初衷是实现可伸缩的语言.并集成面向对象编程和函数式编程的各种特性. Spark是UC Berkeley AMP lab所开源的类Had ...

  8. 基于.net的分布式系统限流组件 C# DataGridView绑定List对象时,利用BindingList来实现增删查改 .net中ThreadPool与Task的认识总结 C# 排序技术研究与对比 基于.net的通用内存缓存模型组件 Scala学习笔记:重要语法特性

    基于.net的分布式系统限流组件   在互联网应用中,流量洪峰是常有的事情.在应对流量洪峰时,通用的处理模式一般有排队.限流,这样可以非常直接有效的保护系统,防止系统被打爆.另外,通过限流技术手段,可 ...

  9. Scala学习资源

    Scala学习资源: Scala官方网站:http://www.scala-lang.org/ Scala github:https://github.com/scala/scala Twitter ...

随机推荐

  1. Hive lateral view explode

    select 'hello', x from dual lateral view explode(array(1,2,3,4,5)) vt as x 结果是: hello   1 hello   2 ...

  2. jQuery EasyUI datagrid列名包含特殊字符会导致表格错位

    首先申明:本文所述的Bug存在于1.3.3以及更高版本中,其它低版本,本人未测试,太老的版本不想去折腾了. 洒家在写前端的SQL执行工具时,表格用了 jQuery EasyUI datagrid,因为 ...

  3. 重学C语言---05运算符、表达式和语句

    一.循环简介 实例程序 /*shoes1.c--把一双鞋的尺码变为英寸*/#include <stdio.h>#define ADJUST 7.64#define SCALE 0.325 ...

  4. linux下安装jdk安装及环境变量配置

    1.默认是在windows下载,linux下安装 2.在jdk官网下载相应版本的jdk,这次下载为 jdk-8u161-linux-x64.tar.gz 3.将下载好的文件上传到指定目录,我这次把它放 ...

  5. git版本超前了N个版本且落后了N个版本的解决办法

    当遇到该问题的时候,一般情况下我们会首先拉取,紧接着就出现了一系列问题………… 其实当输入命令,git pull的时候,会报错,这时瞬间就感到凌乱了&……*%%*%………… 莫慌…… 这时输入 ...

  6. 获取本地机器的特征码IP MAC

    using System; using System.Collections.Generic; using System.Text; using System.Net; using System.Ma ...

  7. 【JAVA】什么是冒泡排序?——面试加分题

    冒泡排序是一种计算机科学领域的较简单的排序算法,有心人将代码不断优化改良,本人特摘抄部分代码进行学习. 文章来自开源中国,转载自:程序员小灰.原文:漫画:什么是冒泡排序? 冒泡排序第一版 public ...

  8. November 15th, 2017 Week 46th Wednesday

    Of all the tribulations in this world, boredom is the one most hard to bear. 所有的苦难中,无聊是最难以忍受的. When ...

  9. MyBatis 中的级联

    MyBatis 的级联分为 3 种. 1.鉴别器(discriminator):它是根据某些条件决定采用具体实现类级联的方案,比如体检表要根据性别去区分. 2.一对一(association):比如学 ...

  10. [Python] 同时安装了python2和python3时,pip命令该如何使用?

    当python2和python3同时安装windows上时,它们对应的pip都叫pip.exe,所以不能够直接使用 pip install 命令来安装软件包. 而是要使用启动器py.exe来指定pip ...