《快学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)
})
}
//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)
}
}
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)
}
}
相关文章推荐
- Windows下Scala环境搭建
- Windows7下安装Scala 2.9.2教程
- Scala代码实现列出Hadoop 文件夹下面的所有文件
- ClassNotFoundException:scala.PreDef$
- sbt创建web项目
- XML 文件解析--含Unicode字符的XML文件
- 分分钟掌握快速排序(Java / Scala 实现)
- Scala极速入门
- Spark初探
- Scala实现REST操作
- Scala method call syntax
- 关于Scala多重继承的菱形问题
- Scala 高阶函数(high-order function)剖析
- Scala Monad Design Pattern
- Spray.io搭建Rest服务
- Spray.io搭建Rest — 支持Twirl模板并部署
- 搭建hadoop/spark集群环境
- Akka (actors) remote example
- scala工具库
- scala-协变、逆变、上界、下界