选择结构

Scala同样提供了对程序流程控制的语法。Scala中的程序流程控制结构虽然与Java类似,但也有自己的一些独特的方法。

选择结构

Scala的if/else语法结构和Java或者C++一样。不过,在Scala中if/else表达式会返回一个值,这个值就是跟在if或else之后的表达式的值。

val x = if (a) y else z

请看下面的示例代码:

val age = 19

// 单分支选择结构
if (age > 20) {
	 println(222)	
}

// 双分支选择结构
if (age > 20) {
	 println(444)
} else {
	 println(555)
}

// 多分支选择结构		
if (age < 18) {
	 println(666)
} else if (age <= 36) {
	 println(777)
} else if (age <= 60) {
	 println(888)
} else{
	 println(999)
}

// 三元运算符		
if(!true) 1 else 0

输出结果如下:

age: Int = 19 
222 
555 
777 

res110: Int = 0

在scala中,更经常是将if语句作为表达式来使用。在Scala中,每个表达式都有值。执行下面的代码:

val score = 60
if(score>=60) "及格" else "不及格"

val result = if(score>=60) "及格" else "不及格"   // 作为表达式,值赋给变量result

val result1 = if(score>=60) "及格" else 0        // 注意:返回的是公共类型Any

val result2 = if(score<60) "不及格"             // 等同于if(score<60) "不及格" else ()

输出结果如下:

score: Int = 60 
res37: String = 及格 
result: String = 及格 
result1: Any = 及格 
result2: Any = ()

示例

【例】请编写scala代码,计算工人报酬。计算原则如下:前40个小时,按小时付报酬,每小时50元;超过40小时,应该付1.5倍报酬。

import scala.io.StdIn

object Test {
  def main(args: Array[String]): Unit = {
    // 基本报酬标准
    val reward = 50.00

    // 动态输入工时
    val workHours = StdIn.readLine("请输入工时:")

    // 将输入工时转换为整数
    val workHoursInt = workHours.toInt

    // 计算报酬总额
    var payment = 0.0
    if(workHoursInt<=40){
      payment = workHoursInt * reward
    }else{
      payment = 40 * reward + (workHoursInt-40)*(reward*1.5)
    }

    // 输出结果
    println(s"工作时长${workHours}小时,应付报酬$payment")
  }
}

《PySpark原理深入与编程实战》