scala基础篇·控制流
object TestControl {
def main(args: Array[String]): Unit = {
ifElse(1)
ifElse(11)
block()
//inputAndOutput()
cycle()
advancedFor()
break()
}
/**
* if-else
*
* @param num
*/
def ifElse(num: Int): Unit = {
if (num > 10) println("i>10") else println("i<=10")
val a = if (num > 10) 20 else 0
printf("a=%d", a)
println()
val b = if (num > 20) 20
val c = if (num > 20) 20 else ()
println(b)
println(c)
}
/**
* 块语句
*/
def block(): Unit = {
val x1 = 0
val y1 = 0
val x2 = 2
val y2 = 3
val distance = {
val dx = x2 - x1
val dy = y2 - y1
math.sqrt(math.pow(dx, 2) + math.pow(dy, 2))
}
println(distance)
}
/**
* 输入输出
*/
def inputAndOutput(): Unit = {
val age = scala.io.StdIn.readLine("age:")
printf("age is %s\n", age)
}
/**
* 循环 while and for
*/
def cycle(): Unit = {
val start = 0
val end = 10
//while
println("--while start--")
var i = start
while (i < end) {
println(i)
i += 1
}
println("--while end--")
//for
println("--for1 start--")
for (j <- start.to(end)) {
println(j)
}
println("--for1 end--")
println("--for-to start--")
for (j <- start to end) {
println(j)
}
println("--for-to end--")
println("--for-Array start--")
for (j <- Array(1, 3, 5)) {
println(j)
}
println("--for-Array end--")
println("--for-string start--")
val str = "hello"
for (c <- str) {
printf("contains char: %c\n", c)
}
//0 until str.length
for (pos <- 0.until(str.length)) {
printf("char at %d is : %s\n", pos, str(pos))
}
println("--for-string end--")
}
/**
* 高级for循环
*/
def advancedFor(): Unit = {
println("多个生成器")
for (i <- 1 to 3; j <- 1 to 3) printf("%d * %d = %d ", i, j, i * j)
println()
println("生成器可以带守卫")
for (i <- 1 to 3; j <- 1 to 3 if i <= j) printf("%d * %d = %d ", i, j, i * j)
println()
println("每一个生成器都可以有一个守卫")
for (i <- 1 to 3 if i > 1; j <- 1 to 3 if i <= j) printf("%d * %d = %d ", i, j, i * j)
println()
println("可以定义变量")
for (i <- 1 to 3; from = 4 - i; j <- from to 3) printf("%d * %d = %d ", i, j, i * j)
println()
println("yield语句")
println(for (i <- 1 to 10) yield i % 3)
println()
for (j <- for (i <- 1 to 10) yield i % 3) {
printf("%d,", j)
}
println()
println(for (i <- 0 to 3; c <- "hello") yield (c + i).toChar)
}
/**
* break的方式
*/
def break(): Unit = {
println("boolean-flag start")
var go = true
for (i <- 1 to 100) {
if (i > 5)
go = false
if (go)
println(i)
}
println("boolean-flag end")
//using break will end with exception
println(" scala.util.control.Breaks.break() start")
for (i <- 1 to 10) {
if (i > 3)
scala.util.control.Breaks.break()
println(i)
}
println(" scala.util.control.Breaks.break() end: cannot print this because of exception")
}
}
运行结果如下:
i<=10
a=0
()
()
i>10
a=20
()
()
3.605551275463989
--while start--
0
1
2
3
4
5
6
7
8
9
--while end--
--for1 start--
0
1
2
3
4
5
6
7
8
9
10
--for1 end--
--for-to start--
0
1
2
3
4
5
6
7
8
9
10
--for-to end--
--for-Array start--
1
3
5
--for-Array end--
--for-string start--
contains char: h
contains char: e
contains char: l
contains char: l
contains char: o
char at 0 is : h
char at 1 is : e
char at 2 is : l
char at 3 is : l
char at 4 is : o
--for-string end--
多个生成器
1 * 1 = 1 1 * 2 = 2 1 * 3 = 3 2 * 1 = 2 2 * 2 = 4 2 * 3 = 6 3 * 1 = 3 3 * 2 = 6 3 * 3 = 9
生成器可以带守卫
1 * 1 = 1 1 * 2 = 2 1 * 3 = 3 2 * 2 = 4 2 * 3 = 6 3 * 3 = 9
每一个生成器都可以有一个守卫
2 * 2 = 4 2 * 3 = 6 3 * 3 = 9
可以定义变量
1 * 3 = 3 2 * 2 = 4 2 * 3 = 6 3 * 1 = 3 3 * 2 = 6 3 * 3 = 9
yield语句
Vector(1, 2, 0, 1, 2, 0, 1, 2, 0, 1)
1,2,0,1,2,0,1,2,0,1,
Vector(h, e, l, l, o, i, f, m, m, p, j, g, n, n, q, k, h, o, o, r)
boolean-flag start
1
2
3
4
5
boolean-flag end
scala.util.control.Breaks.break() start
1
2
3
Exception in thread "main" scala.util.control.BreakControl