scala学习笔记
文章平均质量分 70
明耀先森
乐观,开朗,喜欢编码
展开
-
scala与java对比学习(一)
java 中的构造函数class Peson{ private int age; private string name; public Person(int age, string name){ this.age = age; this.name = name; }}scala中的构造函数class Person(age :原创 2015-06-29 21:28:11 · 1174 阅读 · 0 评论 -
scala学习第一章 基础
scala中使用val,var声明变量,scala将变量或者函数的类型写在函数或变量的后面 例如 var greet : Stringscala中可以将多个值或者变量放在一起声明 例如:var greeting, age : Stringscala中用方法,而不是强制类型转换来做数值类型之间的转换 例如: 5.21.toInt 得到99, 99.toChar得到'c'scala中没原创 2015-08-18 21:57:39 · 650 阅读 · 0 评论 -
快学Scala习题解答—第二章 控制结构和函数
2 控制结构和函数 2.1 一个数字如果为正数,则它的signum为1;如果是负数,则signum为-1;如果为0,则signum为0.编写一个函数来计算这个值 简单的逻辑判断 Scala代码 def signum(num:Int){if(num>0)print(1)else if(num0)print(-1)else print(0)} S原创 2015-08-19 16:48:27 · 2397 阅读 · 1 评论 -
scala学习第二章 控制结构与函数
在scala中可以将if/else表达式的值赋值给一个变量 例如: val s = if(x > 0) 1 else ovar sum = 0;val s == "hello"for(i //until 方法返回一个并不包含上限的区间 sum += s(i)也可以不需要使用下标var sum = 0for(ch <- "Hello") sum += ch每原创 2015-08-19 15:54:19 · 712 阅读 · 0 评论 -
scala学习第三章数组相关操作
val b = new ArrayBuffer[Int]() //或者 new ArrayBuffer[Int] b += 1 //ArrayBuffer(1) 用+= 在尾端添加元素 b += (1,2,3,5) //ArrayBuffer(1,1,2,3,5) 在尾端添加多个元素 b ++= Array(1,2,3) //ArrayBuffer(1,1,2,3,5,1,2原创 2015-08-19 20:03:31 · 769 阅读 · 0 评论 -
快学scala习题解答--第五章 类
5 类 5.1 改进5.1节的Counter类,让它不要在Int.MaxValue时变成负数 Scala代码 class Count{ private var value = Int.MaxValue def increment(){if(value 1 else value } def current = value }原创 2015-08-20 14:57:46 · 2291 阅读 · 1 评论 -
快学Scala习题解答—第八章 继承
8 继承 8.1 扩展如下的BankAccount类,新类CheckingAccount对每次存款和取款都收取1美元的手续费class BankAccount(initialBalance:Double){ private var balance = initialBalance def deposit(amount:Double) = { balance += amo原创 2015-08-20 21:06:49 · 1427 阅读 · 1 评论 -
快学Scala习题解答—第三章 数组相关操作
3 数组相关操作 3.1 编写一段代码,将a设置为一个n个随机整数的数组,要求随机数介于0(包含)和n(不包含)之间 random和yield的使用 Scala代码 import scala.math.random def randomArray(n:Int)={ for(i 0 until n) yield (random * n).原创 2015-08-20 01:01:49 · 2206 阅读 · 0 评论 -
scala学习第五,六,八章 类,对象,继承
对于取值器方法(不会改变对象状态的方法) 去掉()是一个不错的风格myCounter.increament() //对改值器使用()println(myCounter.current) //对取值器不使用()class Person{var age = 0}在scala中,setter和getter分别叫做age和age_=在scala中,如果字段是私有的,gett原创 2015-08-20 14:26:26 · 658 阅读 · 0 评论 -
快学Scala习题解答—第四章 映射和元组
4 映射和元组 4.1 设置一个映射,其中包含你想要的一些装备,以及它们的价格。然后构建另一个映射,采用同一组键,但是价格上打9折 映射的简单操作 Shell代码 scala> val map = Map("book"->10,"gun"->18,"ipad"->1000) map: scala.collection.immutable.Map[ja原创 2015-08-20 11:17:56 · 2640 阅读 · 0 评论 -
Scala学习第十章 特质
在Java中,类只能扩展自一个超类,可以实现任意数量的接口,但接口中只能包含抽象类,不能包含字段,scala提供"特质",而非接口,特质可以同时拥有抽象方法和具体方法,支持部分实现,类可以实现多个特质.让特质拥有具体行为存在一个弊端.当特质改变时,所有混入了改特质的类都必须重新编译一般来说特质从最后一个开始被处理在JVM 中一个类只能扩展一个超类特质构造顺序:1.首原创 2015-08-22 15:17:48 · 587 阅读 · 0 评论 -
快学Scala习题解答—第九章 文件和正则表达式
9 文件和正则表达式 9.1 编写一小段Scala代码,将某个文件中的行倒转顺序(将最后一行作为第一行,依此类推) Scala代码 import io.Source import java.io.PrintWriter val path = "test.txt" val reader = Source.fromFile(pat原创 2015-08-21 21:29:03 · 1507 阅读 · 1 评论 -
快学Scala习题解答—第一章 基础
2 基础 2.1 在Scala REPL中键入3.然后按Tab键。有哪些方法可以被应用? 在scalaREPL中要键入"3.",特别要注意"."不要忘记键入下面是结果 Scala代码 != ## % & * + -原创 2015-08-19 10:39:14 · 2782 阅读 · 0 评论 -
快学Scala习题解答—第十六章 XML处理
1. (0) 得到什么?(0)(0)呢?为什么?回答:(0) 得到一个scala.xml.Node,(0)(0)也是得到scala.xml.Node。因为scala.xml.Node 实现了方法 def apply(i: Int): Node,所以支持串接调用。注意:scala-xml-x.x.x.jar 需要另外导入。?12原创 2015-08-24 20:38:24 · 1156 阅读 · 0 评论 -
快学Scala习题解答—第十章 特质
11 特质11.1 java.awt.Rectangle类有两个很有用的方法translate和grow,但可惜的是像java.awt.geom.Ellipse2D这样的类没有。在Scala中,你可以解决掉这个问题。定义一个RenctangleLike特质,加入具体的translate和grow方法。提供任何你需要用来实现的抽象方法,以便你可以像如下代码这样混入该特质:val egg =原创 2015-08-22 15:31:12 · 1535 阅读 · 1 评论 -
scala中span和partition区别
scala中的partition span splitAt groupBy注:val (a,b) = List(1,2,3,4,5).partition(_%2==0) // (List(2,4), List(1,3,5))可把Collection分成:满足条件的一组,其他的另一组。和partition相似的是span,但有不同:List(1,9,2,4,5).原创 2015-07-07 19:39:13 · 6200 阅读 · 1 评论 -
scala中的对象私有字段
在scala中方法可以访问,方法可以访问该类的所有对象的私有字段,class Person{ private var age = 0 def increment(){age += 1} //可以访问另一个对象的私有字段 def younger(other : Person)= { age < other.age }}因为other同样是Person的对象, 所以可以访原创 2015-07-02 20:14:40 · 1000 阅读 · 0 评论 -
Scala中下划线的应用层场景
几个应用场景:1、作为“通配符”,类似Java中的*。如import scala.math._2、:_*作为一个整体,告诉编译器你希望将某个参数当作参数序列处理!例如val s = sum(1 to 5:_*)就是将1 to 5当作参数序列处理。3、指代一个集合中的每个元素。例如我们要在一个Array a中筛出偶数,并乘以2,可以用以下办法:a.filter(_%2==0)转载 2015-06-29 21:08:51 · 554 阅读 · 0 评论 -
scala实现排序算法
val shuffledata = List(8,7,6,5,4,3,2,1) println(sortList(shuffledata)) def sortList(list: List[Int]): List[Int] = list match { case List() => List() case head :: tail => compute(h原创 2015-07-05 18:49:02 · 920 阅读 · 0 评论 -
scala实现归并排序
object MergedSort { def main(args: Array[String]) { def mergeSort[T] (less: (T, T) => Boolean) (input: List[T]): List[T] ={ /** * @param xList 要合并的有序序列 * @param yList 要和并的有序序原创 2015-07-07 16:07:44 · 1191 阅读 · 0 评论 -
快学Scala习题解答—第十一章 操作符
11 操作符11.1 根据优先级规则,3 + 4 -> 5和3 -> 4 + 5是如何被求值的?在REPL中执行即可得到结果。都是从左至右执行12.2 BigInt类有一个pow方法,但没有用操作符字符。Scala类库的设计者为什么没有选用**(像Fortran那样)或者^(像Pascal那样)作为乘方操作符呢?Scala中的操作符就是方法,其优先级是根据首字母来判断的,优先级如下原创 2015-08-22 16:21:46 · 1717 阅读 · 0 评论 -
快学Scala习题解答—第十三章 集合
14.1 编写一个函数,给定字符串,产出一个包含所有字符的下标的映射。举例来说:indexes("Mississippi")应返回一个映射,让'M'对应集{0},'i'对应集{1,4,7,10},依此类推。使用字符到可变集的映射。另外,你如何保证集是经过排序的?更新scala到版本2.10.0。有可变的可排序的Set,实际上还是TreeSetimport collection.mutabl原创 2015-08-23 16:59:01 · 1370 阅读 · 0 评论 -
快学Scala习题解答—第十五章 注解
15 注解 16.1 编写四个JUnit测试用例,分别使用带或不带某个参数的@Test注解。用JUnit执行这些测试 import org.junit.Testclass ScalaTest { @Test def test1(){ print("test1") } @Test(timeout = 1L) def test2(){原创 2015-08-24 16:52:03 · 1147 阅读 · 0 评论 -
快学Scala习题解答—第十四章 模式匹配和样例类
14 模式匹配和样例类14.1 JDK发行包有一个src.zip文件包含了JDK的大多数源代码。解压并搜索样例标签(用正则表达式case [^:]+:)。然后查找以//开头并包含[Ff]alls?thr的注释,捕获类似// Falls through或// just fall thru这样的注释。假定JDK的程序员们遵守Java编码习惯,在该写注释的地方写下了这些注释,有多少百分比的样例是会掉原创 2015-08-23 21:38:43 · 1513 阅读 · 0 评论 -
scala学习第十三章 集合
scala集合有三类:,分别为序列(Seq),集(Set)和映射(Map)集是无先后次序的集合,不重复元素的结合+将原书添加到无先后次序的集合中;+:和:+向前或向后追加到序列;++将两个集合串接在一起;-和--移除元素seq是一个有先后次序的值的序列,比如数组或列表,IndexedSeq允许我们通过整型的下标快速的访问任意元素.Sorted中,元素以某种排过序的顺序被访问.原创 2015-08-23 16:04:44 · 594 阅读 · 0 评论 -
scala学习第四章 映射和元组
要检查映射中是否有某个指定的键,可以用contains方法:val bobsScore = if(score.contains("Bob")) score("bob") else contain 0还有一种快捷写法:val bobsScore = score.getOrElse("Bob",0) //如果映射包含键"Bob",返回对应的值,否则,返回0val t = (1,3.14,原创 2015-08-20 11:15:00 · 504 阅读 · 0 评论 -
快学Scala习题解答—第六章 对象
6 对象 6.1 编写一个Conversions对象,加入inchesToCentimeters,gallonsToLiters和milesToKilometers方法 Scala代码 object Conversions{ def inchesToCentimeters(){} def gallonsToLiters(){}原创 2015-08-20 16:08:02 · 2508 阅读 · 1 评论 -
快学Scala习题解答—第十二章 高阶函数
12 高阶函数12.1 编写函数values(fun:(Int)=>Int,low:Int,high:Int),该函数输出一个集合,对应给定区间内给定函数的输入和输出。比如,values(x=>x*x,-5,5)应该产出一个对偶的集合(-5,25),(-4,16),(-3,9),…,(5,25)object Test extends App { def values(fun: (Int原创 2015-08-22 21:52:56 · 2334 阅读 · 1 评论