您的位置:首页 > 其它

《快学scala》笔记及答案2

2016-01-17 16:22 302 查看
package com.zhuxiaoyu.chapter2

import scala.math.BigInt

object Chapter2 {

/**

* 笔记、

*

* 方法中的返回值是Unit表示java中的void。但有区别void是没有值,而Unit是表示”无值”的值(相当于对象无内容)

*

* 因为scala可以省略语句的结尾,但是多行表示一个语句怎么办,可在语句末尾加上//表示未结束

*

* 赋值语句的值是Unit类型,所以x = y = 的结果是y = 1 和x = Unit

* 对需要多个语句实现初始化的字段可以使用{}将多个语句包含

* 如

* val distance = {val dx = x - x0; val dy = y - y0;sqrt(dx * dx + dy* dy)}

* 在这个语句块中最后一句的返回值作为distance的值。在函数定义中也是最后一个语句作为函数的返回值,无需return

*

* 循环

*

* for(i <- Range)//

* until 不包含上线的区间,比to少最后一个

* for(Range; Range) //eg: for(i <- 1 to 9 ; j<- 4 to 9)

* 守卫for(i <- 3 to 5; j<- 5 to 9 if i !=j) //不输出i == j

* for(i <- 0 to 10; from <- 7-i;j <- from to 9)

* 记录每次for循环的值for(Range) yield

*

*

* scala没有break或者continue退出循环,可用以下方法处理

* 1.使用boolean

* 2.使用嵌套函数-可以从函数中return

* 3.使用Breaks对象的break方法

* import scala.util.control.Breaks._

* breakable(

* for (i <- 1 until 10) {

* if (i == 7) break()

* print(i)

* })

* 函数式定义别忘了 =

* 只要函数不是递归,就可以不指定返回类型

* eg:

* def ads(x: Double) = {}

*

* 默认参数和带名参数

* eg:

* def deo(str:String , left:String = “[“,right: String = “]”) =

* left + str + right

* 若函数调用为deo(“abc”) 则输出[abc]

* deo(“{“, “abc”) 则输出为{abc]

* deo(“{“, “abc”, “}”) 则输出为{abc}

*

* 变长参数定义

* def deo(str: String*) = {}

*

* 没有返回值的函数称为过程 其定义可以没有=

* 即def deo(str: String) {}

* 也可以写成def deo(str: String): Unit = {}

*

* lazy值

* 当val被声明为lazy时,其初始化将被推迟至首次对他取值

*

* lazy val words = “scala”

*

* Int、String等的公共超类是Any

*

*/

import scala.util.control.Breaks._

def main(args: Array[String]): Unit = {

breakable(

for (i <- 1 until 10) {

if (i == 7) break()

print(i)

})

for (i <- 2 to 7; j <- 1 to 6 if i != j) yield i

/**
* 1.
*/
def signum(num: Int) = {
if (num > 0) {
1
} else if (num < 0) {
-1
} else {
0
}
}
/**
* 2.类型Unit 值: ()
*/
val t = {}
print(t)

/**
* 3.x为Unit时
*
* 4.
*/
for (i <- 0 to 10 reverse) println(i)

/**
* 5.
*/
def countdown(n: Int) {
for (i <- 0 to n reverse) print(i)
}
/**
* 6. 8.
*/
def unicodePlus(str: String): Long = {
var t: Long = 1
for (i <- 0 until str.length) {
t = t * i.toLong
}
t
}
var pp: Long = 1
//7.
"hello".foreach(pp *= _.toLong)


}

//9

def product(s: String): Long = {

if (s.length == 1) return s.charAt(0).toLong

else s.take(1).charAt(0).toLong * product(s.drop(1))

}

//10

def mi(x: Double, n: Int): Double = {

if (n == 0) 1

else if (n > 0 && n % 2 == 0) mi(x, n / 2) * mi(x, n / 2)

else if (n > 0 && n % 2 == 1) x * mi(x, n - 1)

else 1 / mi(x, -n)

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  scala