一、If … else … 语句
示例代码:
package com.lj.scala.main
import scala.io.StdIn
/**
* @author Administrator
* @create 2020-03-07
*/
object IfTest {
def main(args: Array[String]): Unit = {
var i = 0
while (i < 7) {
print("请输入姓名:")
var name = StdIn.readLine()
print("请输入年龄:")
var age = StdIn.readInt()
if (age > 0 && age < 18) {
println(name + "年龄" + age + "岁,未成年!")
} else if (age >= 18 && age <= 25) {
printf("%s年龄%s岁,青年!\n", name, age)
} else if (age > 25 && age < 35) {
println(s"$name" + "年龄" + s"$age" + "岁,青壮年!")
} else {
// 嵌套分支
if (age > 35 && age < 60) {
println(s"$name" + s"年龄$age" + ",中老年!")
} else if (age >= 60 && age <= 80) {
println(s"$name" + s"年龄$age" + ",老年!")
} else (
printf("%s年龄%s,吉祥老人!\n", name, age)
)
}
i += 1
}
}
}
========================运行结果====================================
请输入姓名:Jack
请输入年龄:13
Jack年龄13岁,未成年!
请输入姓名:Tom
请输入年龄:22
Tom年龄22岁,青年!
请输入姓名:Leo
请输入年龄:31
Leo年龄31岁,青壮年!
请输入姓名:Rose
请输入年龄:51
Rose年龄51,中老年!
请输入姓名:Marry
请输入年龄:60
Marry年龄60,老年!
请输入姓名:Mali
请输入年龄:85
Mali年龄85,吉祥老人!
请输入姓名:Amy
请输入年龄:99
Amy年龄99,吉祥老人!
========================运行结果====================================
二、switch分支语句
在Scala中没有switch语句,而是使用模式匹配(match-case)来处理的。
三、for循环
示例代码:
package com.lj.scala.main
/**
* @author Administrator
* @create 2020-03-07
*/
object ForTest {
def main(args: Array[String]): Unit = {
/**
* 范围数据循环方式
* 1、start to end:前后为闭区间
* 2、start until end:前闭后开
*/
var sum = 0
for (i <- 1 to 3) {
sum += i
}
println(s"to方式sum求和:$sum")
sum = 0
for (i <- 1 until 3) {
sum += i
}
printf("until方式sum求和:%s\n", sum)
sum = 0
/**
* 循环守卫:即循环保护式(也称条件判断是),保护式为true则进入循环体内部,为false则跳过,相当于continue
*
*/
for (i <- 0 to 100 if i%2 == 0) {
sum += i
}
printf("循环守卫方式sum求和:%s\n", sum)
sum = 0
// 上面的循环守卫方式,相当于下面的if判断式
for (i <- 0 to 100) {
if (i % 2 == 0) {
sum += i
}
}
printf("循环守卫循环体内判断方式sum求和:%s\n", sum)
sum = 0
/**
* 引入变量
*/
for (i <- 1 to 3; j = 4 - i) {
print("j=" + j + " ")
}
println("\n第二种方式如下")
// 上面的一如变量相当于下面的代码
for (i <- 1 to 3) {
var j = 4 - i
print("j=" + j + " ")
}
println()
/**
* 嵌套循环
*/
for (i <- 1 to 2; j <- 2 to 3) {
printf("i = %s, j = %s\n", i, j)
}
println()
/**
* 循环返回值
* 代码中关键字yield说明:将遍历过程中处理的结果返回到一个Vector集合
* yield i将每次循环得到的i放入到vector集合中,并返回给res
* i这里是一个代码块如下代码很好的说明了这个特点,所以我们可以对i进行处理
*/
val res = for (i <- 0 to 10 if i%2 == 0) yield i
println("循环返回值res:" + res)
val res2 = for (i <- 0 to 10) yield {
if (i%2 == 0) {
i
} else {
i + "不是偶数"
}
}
println("循环返回值res2:" + res2)
/**
* 使用花括号{}代替小括号()
*/
for (i <- 1 to 3; j = i * 2) {
println("i = " + i + "时,j = " + j)
}
// 上面的()替换为{}
for {
i <- 1 to 3
j = i * 2
} {
println("{i} = {" + i + "}时,{j} = {" + j + "}")
}
/**
* for循环控制步长使用Range(start, end, step)
*/
for (i <- Range(153, 190, 20)) {
println("步长数据:" + i)
}
}
}
========================运行结果====================================
to方式sum求和:6
until方式sum求和:3
循环守卫方式sum求和:2550
循环守卫循环体内判断方式sum求和:2550
j=3 j=2 j=1
第二种方式如下
j=3 j=2 j=1
i = 1, j = 2
i = 1, j = 3
i = 2, j = 2
i = 2, j = 3
循环返回值res:Vector(0, 2, 4, 6, 8, 10)
循环返回值res2:Vector(0, 1不是偶数, 2, 3不是偶数, 4, 5不是偶数, 6, 7不是偶数, 8, 9不是偶数, 10)
i = 1时,j = 2
i = 2时,j = 4
i = 3时,j = 6
{i} = {1}时,{j} = {2}
{i} = {2}时,{j} = {4}
{i} = {3}时,{j} = {6}
步长数据:153
步长数据:173
========================运行结果====================================
四、while循环控制
示例代码:
package com.lj.scala.main
/**
* @author Administrator
* @create 2020-03-07
*/
object WhileTest {
def main(args: Array[String]): Unit = {
/**
* while循环语法格式
* while () {
* 循环体语句
* 循环变量迭代
* }
*/
var flag = true
var i = 2
while (flag) {
println("运算结果:" + (i * 3))
i += 1
if (i == 5) {
flag = false
}
}
}
}
========================运行结果====================================
运算结果:6
运算结果:9
运算结果:12
========================运行结果====================================
五、do…while循环语句
示例代码:
package com.lj.scala.main
/**
* @author Administrator
* @create 2020-03-07
*/
object DoWhileTest {
def main(args: Array[String]): Unit = {
/**
* do...while循环语法格式
*
* 循环变量初始化
* do {
* 循环体语句
* 循环变量迭代
* } while(循环条件)
*
*/
var i = 0
do{
println("运算结果:" + (i * 17))
i += 26
} while ( i < 98)
}
}
========================运行结果====================================
运算结果:0
运算结果:442
运算结果:884
运算结果:1326
========================运行结果====================================
六、while循环的终断
基本说明
Scala内置控制结构特地去掉了break和continue,是为了更好的适应函数化编程,推荐使用函数
式的风格解决break和contine的功能,而不是一个关键字。
示例代码:
package com.lj.scala.main
import util.control.Breaks._
/**
* @author Administrator
* @create 2020-03-07
*/
object WhleBreakTest {
def main(args: Array[String]): Unit = {
/**
* breakable()函数
* 说明:breakable是一个高阶函数:可以接收函数的函数就是高阶函数
*/
/*def breakable(op: => Unit){
try {
op
} catch {
case ex: BreakControl =>
if (ex ne breakException) throw ex
}
}
op: => Unit表示接收的参数是一个没有输入,没有返回值的函数
即可以简单理解可以接收一段代码块
*/
// breakable对break()抛出异常做了处理,代码就继续执行
var n = 1
breakable{
while ( n <= 20) {
n += 5
println("n = " + n)
if (n > 18) {
// 终断while
break()
}
}
}
println("结束!!!")
}
}
========================运行结果====================================
n = 6
n = 11
n = 16
n = 21
结束!!!
========================运行结果====================================
如何实现continue的效果
Scala内置控制结构特地也去掉了continue,是为了更好的适应函数化编程,可以使用if – else或是
循环守卫实现continue的效果
对以前的知识回顾,加深基础知识!
学习来自:北京尚硅谷韩顺平老师—尚硅谷大数据技术之Scala
每天进步一点点,也许某一天你也会变得那么渺小!!!