大数据之脚踏实地学13--Scala控制流
Posted 数据分析1480
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了大数据之脚踏实地学13--Scala控制流相关的知识,希望对你有一定的参考价值。
还没关注?
快动动手指!
往期回顾
Scala中的输入与输出
在Scala中经常会涉及到变量值的输入和输出,输入是指通过键盘将数据信息传送到Scala环境的内存中,输出则是指将内存中的数据返回到指定的地方(如电脑屏幕、本地文件或数据库等)。
两种输入方法
通过等号赋值的方法,向变量中传递值
调用scala.io.StdIn包中的read类函数,在屏幕中完成数据的输入
举例
import scala.io.StdIn._ // 下划线代表StdIn包内的所有函数
object InPut {
def main(args: Array[String]): Unit = {
// 方法一:等号赋值法
val name : String = "刘顺祥"
// 方法二:函数输入法
println("请输入您的年龄:")
val age = readInt() // 输入不同数据类型的值,所使用的函数不一样
println("亲爱的" + name + "先生,您的年龄为" + age + "岁")
}
}
两种输出方法
直接调用变量名的名称,但该方法只能在交互的REPL中执行
借助于打印函数,该方法又可以衍生出三种用法,即:
a) println,结合加号(+),将多个内容进行连接并打印输出
b) println,传入表达式(表达式中所涉及的变量必须以美元符号作前缀),
其中表达式须用大括号框起来,同时需要在被打印对象的最前面加上字母s
c) printf,格式化输出,类似于Python的用法
举例
object OutPut {
def main(args : Array[String]) : Unit = {
val name = "刘顺祥"
val balance = 6.52
// 加号(+)拼接法
println("亲爱的" + name + "先生,您的话费余额为" + balance + "元。")
// s表达式法
println(s"亲爱的${name}先生,您的话费余额为${balance}元")
// 格式化输出法
printf("亲爱的%s先生,您的话费余额为%.2f元\n", name, balance)
}
}
需要注意的是,在Scala中,打印函数println和print的区别在于前者打印完会自动换行,而后者却不能换行,如需换行必须在打印内容的结尾添加\n。
Scala中的控制流
在Scala编程中,会经常使用到控制流技术,基于该技术,可以轻松地解决很多重复性的工作。本文主要分享有关控制流中的if分支、for循环和while循环。
if分支
if分支主要包含三种,分别是单分支、双分支和多分支,语法如下:
// 单分支
if (condition) {
expression
}
// 双分支
if (condition) {
expression1
} else {
expression2
}
// 多分支(以三支为例)
if (condition1) {
expression1
} else if (condition2) {
expression2
} else {
expression3
}
举例
import scala.io.StdIn
object IfBranch01 {
def main(args: Array[String]): Unit = {
// 判断用户是否登录成功
println("请输入用户名:")
val name = StdIn.readLine()
println("请输入密码:")
val passwd = StdIn.readLine()
if (name == "scala" && passwd == "12345678") {
println("登录成功!欢迎来到学习乐园")
}
// 判断学员是否通过科目二考试
println("请输入您的考试成绩:")
val score = StdIn.readInt()
if (score >= 90) {
println("恭喜您,考试合格!")
} else {
println("很遗憾,下次继续努力哦!")
}
// 根据用户的年龄,判断其所处的年龄段
println("请输入您的年龄:")
val age = StdIn.readInt()
if (age < 18){
println("未成年")
} else if (age <= 45) {
println("青壮年")
} else if (age <= 65) {
println("中老年")
} else {
println("老年")
}
}
}
我们再举一个嵌套的例子,假设某旅游区在设置票价时,按照如下规则:如果游客在旺季(3~10月份)来此地旅游,并且他是学生,则票价为80元,否则为150元;如果在淡季,学生票价为50元,否则为100元。该如何利用嵌套的if分支来完成呢?代码如下:
object IfBranch02 {
def main(args: Array[String]): Unit = {
println("请输入月份:")
val month = StdIn.readInt()
println("请问是否为学生:")
val is_student = StdIn.readLine()
if (month >= 3 && month <= 10){
if (is_student == "否") {
println("您的票价是150元")
} else {
println("您的票价是80元")
}
} else {
if (is_student == "否") {
println("您的票价是100元")
} else {
println("您的票价是50元")
}
}
}
}
for循环
for循环在某个迭代对象已知的情况下,执行的的重复性操作。语法如下:
for (i <- iterable) {
expression
}
举例
object ForLoop {
def main(args: Array[String]): Unit = {
// 统计1...100的所有偶数中,是3的倍数的个数,以及这些数的总和
var counts = 0
var sum = 0
for (i <- 2 to 100 by 2) {
if (i % 3 == 0) {
counts += 1
sum += i
}
}
printf("1...100的偶数中,是3的倍数的个数为%d个\n", counts)
printf("这些数值的总和为%d\n", sum)
// 打印99乘法口诀
for (i <- 1 to 9) {
for (j <- 1 to i) {
print(j + "*" + i + "=" + (i*j) + "\t")
}
println()
}
// 将列表中的每个元素做平方除以5的操作,并将运算结果保存到变量res中
val X = List(10,8,23,17,7)
val res = for (i <- X) yield {
(i * i)/5.0
}
println("res = " + res)
}
}
while循环
在前文介绍了for循环的使用,除此while循环也可以实现重复性操作。所不同的是,for循环主要解决已知可迭代对象的循环问题,而while循环则主要针对未知迭代对象的循环问题,语法如下:
// while循环的语法
初始化计数器
while (condition) {
expression
计数器叠加
}
// do...while的语法
初始化计数器
do {
expression
计数器叠加
}
while (condition)
举例
import scala.io.StdIn
import scala.util.control.Breaks._
object WhileLoop {
def main(args: Array[String]): Unit = {
// 计算1...100的和
var i = 1
var sum = 0
while (i <= 100) {
sum += i
i += 1
}
println("1...100的总和为:" + sum)
// 用户登录邮箱,一共5次机会,如果输错则继续等待输入,并返回剩余登录次数
breakable{
var counts = 0
while (true) {
println("请输入用户名:")
val user = StdIn.readLine()
println("请输入密码:")
val passwd = StdIn.readLine()
if (user == "scala" && passwd == "123abc") {
println("恭喜您,登录成功!")
break()
} else {
if (counts < 4) {
printf(s"输入的用户名或密码错误!您还剩${4 - counts}次输入机会!\n")
} else {
println("输入的用户名或密码错误!,请24小时之后再尝试!")
break()
}
}
counts += 1
}
}
}
}
具有编程经验的你来说,通常在while循环中经常会用到break做强制退出,遗憾的是Scala中没有break关键词,只有break函数,该函数的目的是抛出异常,最终再由breakable函数处理。需要注意的是,break函数的调用需要导入import scala.util.control.Breaks._。
结语
每天进步一点点:数据分析1480
长按扫码关注我
以上是关于大数据之脚踏实地学13--Scala控制流的主要内容,如果未能解决你的问题,请参考以下文章