前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >大数据之脚踏实地学13--Scala控制流

大数据之脚踏实地学13--Scala控制流

作者头像
1480
发布2019-05-21 23:16:53
5350
发布2019-05-21 23:16:53
举报
文章被收录于专栏:数据分析1480数据分析1480

还没关注?

快动动手指!

往期回顾

大数据之脚踏实地学12--Scala数据类型与运算符

大数据之脚踏实地学11--Spark神器的安装

大数据之脚踏实地学10--Hive独立式安装

Scala中的输入与输出

在Scala中经常会涉及到变量值的输入和输出,输入是指通过键盘将数据信息传送到Scala环境的内存中,输出则是指将内存中的数据返回到指定的地方(如电脑屏幕、本地文件或数据库等)。 两种输入方法

  • 通过等号赋值的方法,向变量中传递值
  • 调用scala.io.StdIn包中的read类函数,在屏幕中完成数据的输入

举例

代码语言:javascript
复制
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的用法

举例

代码语言:javascript
复制
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分支主要包含三种,分别是单分支、双分支和多分支,语法如下:

代码语言:javascript
复制
// 单分支
if (condition) {
  expression
  }

// 双分支
if (condition) {
expression1
} else {
expression2
}

// 多分支(以三支为例)
if (condition1) {
expression1
} else if (condition2) {
expression2
} else {
expression3
}

举例

代码语言:javascript
复制
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分支来完成呢?代码如下:

代码语言:javascript
复制
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循环在某个迭代对象已知的情况下,执行的的重复性操作。语法如下:

代码语言:javascript
复制
for (i <- iterable) {
      expression
    }

举例

代码语言:javascript
复制
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循环则主要针对未知迭代对象的循环问题,语法如下:

代码语言:javascript
复制
// while循环的语法
初始化计数器
  while (condition) {
    expression
    计数器叠加
    }

// do...while的语法
初始化计数器
  do {
    expression
    计数器叠加
    }
   while (condition)

举例

代码语言:javascript
复制
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

长按扫码关注我

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-03-07,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 数据分析1480 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 往期回顾
  • Scala中的输入与输出
  • Scala中的控制流
  • 结语
相关产品与服务
大数据
全栈大数据产品,面向海量数据场景,帮助您 “智理无数,心中有数”!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档