zoukankan      html  css  js  c++  java
  • Scala运算符

    [toc]

    ## Scala运算符

    > 运算符是一种特殊的符号,用以表示数据的运算、赋值和比较等。
    >
    > 1. 算术运算符
    > 2. 赋值运算符
    > 3. 比较运算符(关系运算符)
    > 4. 逻辑运算符
    > 5. `位运算符`

    ### 1. 算术运算符

    > 1. 算术运算符(arithmetic)是对`数值类型的变量`进行运算的,在Scala程序中使用的非常多。
    >
    > 2. 算术运算符一览图:
    >
    > ![image-20210322213558573](assets/image-20210322213558573.png)
    >
    > 3. 案例演示算术运算符的使用`(Operator.scala)`:
    >
    > 1. `+, - , * , / , % 重点讲解 /、%`
    > 2. `+、-、* 是一个道理,完全可以类推。`
    > 3. ==算数运算符的运算规则和Java一样。==
    >
    > 4. 细节说明:
    >
    > 1. 对于除号“/”,它的整数除和小数除是有区别的:整数之间做除法时,只保留整数部分而舍弃小数部分。 `例如:var x : Int = 10/3 ,结果是 3`
    > 2. 当对一个数取模时,可以等价 `a%b=a-a/b*b` , 这样我们可以看到取模的一个本质运算(==和java 的取模规则一样==)。
    > 3. ==Scala中没有++、--操作符,需要通过+=、-=来实现同样的效果==。

    ~~~~scala
    /**
    * @Date 2021/3/22 20:05
    * @Version 10.21
    * @Author DuanChaojie
    */
    object ArithoperDemo01 {
    def main(args: Array[String]): Unit = {
    /** / 号的使用
    * r1 = 3
    * r2 = 3.0
    * r3 = 3.3333333333333335
    * r3 = 3.33
    */
    var r1: Int = 10 / 3
    println("r1 = " + r1)
    var r2: Double = 10 / 3
    println("r2 = " + r2)
    var r3: Double = 10.0 / 3
    println("r3 = " + r3)
    println("r3 = " + r3.formatted("%.2f"))

    /** %的使用
    * 1
    * -1
    * -1
    * 1
    */
    println(10 % 3)
    println(-10 % 3)
    println(-10 % -3)
    println(10 % -3)

    /** ++ 和 --
    * 在scala中没有 ++ 和 --,而使用 +=1 和 -=1
    */
    var num1 = 10
    // num1++ 错误
    num1 += 1
    num1 -= 1
    println(num1) //10


    }
    }
    ~~~~

    #### 课堂练习

    > 1. 假如还有97天放假,问:xx个星期零xx天
    > 2. 定义一个变量保存华氏温度,华氏温度转换摄氏温度的公式为:5/9*(华氏温度-100),请求出华氏温度对应的摄氏温度。[测试:232.5]

    ~~~~scala
    /**
    * @Date 2021/3/22 20:17
    * @Version 10.21
    * @Author DuanChaojie
    */
    object ArithoperExercise01 {
    def main(args: Array[String]): Unit = {
    /**
    * 假如还有97天放假,问:xx个星期零xx天
    */
    val days = 97

    // 13个星期零6天
    printf("%d个星期零%d天", days / 7, days % 7)

    println()
    /**
    * 定义一个变量保存华氏温度,
    * 华氏温度转换摄氏温度的公式为:5/9*(华氏温度-100),
    * 请求出华氏温度对应的摄氏温度。[测试:232.5]
    */
    val huashi = 232.5
    val sheshi = 5.0 / 9 * (huashi - 100)
    printf("232.5华氏度等于%.2f摄氏度", sheshi)

    }
    }
    ~~~~

    ### 2. 关系运算符(比较运算符)

    > 1. 关系运算符的结果都是Boolean型,也就是要么是true,要么是false
    >
    > 2. 关系表达式 经常用在 if结构的条件中或循环结构的条件中
    >
    > 3. `关系运算符的使用和java一样`
    >
    > 4. 关系运算符一览图:
    >
    > ![image-20210322215226523](assets/image-20210322215226523.png)
    >
    > 5. 案例说明:

    ~~~~scala
    var a = 9
    var b = 8
    println(a > b) // true
    println(a >= b) // true
    println(a <= b) // false
    println(a < b) // false
    println(a == b) // false
    println(a != b) // true
    var flag: Boolean = a > b // true
    ~~~~

    > 细节说明:
    >
    > 1. 关系运算符的结果都是Boolean型,也就是要么是true,要么是false。
    > 2. 关系运算符组成的表达式,我们称为关系表达式。 a > b
    > 3. 比较运算符“==”不能误写成“=”
    > 4. 使用陷阱: 如果两个浮点数进行比较,应当保证数据类型一致。

    ### 3. 逻辑运算符

    > 1. 用于连接多个条件(一般来讲就是关系表达式),最终的结果也是一个Boolean值。
    >
    > 2. 逻辑运算符一览图:
    >
    > ![image-20210322215700198](assets/image-20210322215700198.png)

    ### 4. 赋值运算符

    赋值运算符就是将某个运算后的值,赋给指定的变量。

    #### 赋值运算符的分类

    ==这部分的赋值运算涉及到二进制相关知识,其运行的规则和Java一样。==

    ![image-20210322215926999](assets/image-20210322215926999.png)

    ![image-20210322215938083](assets/image-20210322215938083.png)

    ~~~~scala
    /**
    * @Date 2021/3/22 20:32
    * @Version 10.21
    * @Author DuanChaojie
    */
    object AssignoperDemo01 {

    def main(args: Array[String]): Unit = {
    var num = 2
    // 左移2位后赋值
    num <<= 2
    println(num)
    num >>= 3
    println(num) //1

    // 在scala 中支持代码块,返回值
    val res = {
    if (num > 1) "hello scala" else 100
    }
    println("res = " + res) //100

    swap()
    exchange()

    }


    /**
    * 不使用第三个值交换两个数的值
    */
    def swap(): Unit = {
    var a = 10
    var b = 20
    a = a + b
    b = a - b
    a = a - b
    println("a =" + a)
    println("b =" + b)
    }

    /**
    * 位运算
    */
    def exchange(): Unit = {
    var a = 10
    var b = 20
    a = a ^ b
    println(a)
    b = a ^ b
    println(b)
    a = a ^ b
    println(a)
    }
    }
    ~~~~

    #### 赋值运算符特点

    > 1. 运算顺序从右往左
    > 2. 赋值运算符的左边 只能是变量,右边 可以是变量、表达式、常量值/字面量
    > 3. 复合赋值运算符等价于下面的效果 ==> 比如:a+=3 等价于a=a+3

    #### 位运算符

    ==位运算符的规则和Java一样==

    ![image-20210322220428356](assets/image-20210322220428356.png)

    #### 运算符的特别说明

    > Scala不支持三目运算符 , 在Scala 中使用 if – else 的方式实现。
    >
    > - `val num = 5 > 4 ? 5 : 4 //没有`
    > - `val num = if (5>4) 5 else 4`
    >
    > ==Scala的设计理念:一种事情尽量只有一种方法完成,这样可以让代码风格更加统一。==

    #### 课堂练习

    > 案例1:求两个数的最大值
    >
    > 案例2:求三个数的最大值

    ~~~~scala
    /**
    * @Date 2021/3/22 20:49
    * @Version 10.21
    * @Author DuanChaojie
    */
    object NoticeDemo01 {
    def main(args: Array[String]): Unit = {
    /**
    * 案例1:求两个数的最大值
    * 案例2:求三个数的最大值
    */
    println(max(1,2))
    println(max(4,3))
    println(max(1,2,3))
    println(max(6,5,4))

    }

    def max(n1: Int, n2: Int): Int = {
    if (n1 > n2) return n1 else n2
    }

    def max(n1: Int, n2: Int, n3: Int): Int = {
    var res = if (n1 > n2) n1 else n2
    res = if (n3 > res) n3 else res
    return res
    }
    }
    ~~~~

    ### 5. 运算符的优先级

    > 1. 运算符有不同的优先级,所谓优先级就是表达式运算中的运算顺序。如右表,上一行运算符总优先于下一行。
    > 2. 只有单目运算符、赋值运算符是从右向左运算的。
    > 3. 运算符的优先级和Java一样。
    > 4. 小结运算符的优先级
    > 1. () []
    > 2. 单目运算
    > 3. 算术运算符
    > 4. 移位运算
    > 5. 比较运算符(关系运算符)
    > 6. 位运算
    > 7. 关系运算符
    > 8. 赋值运算
    > 9. `,`

    ![image-20210322220958110](assets/image-20210322220958110.png)

    ### 6. 键盘输入语句

    > 1. 在编程中,需要接收用户输入的数据,就可以使用键盘输入语句来获取。
    > 2. 要求:可以从控制台接收用户信息,【姓名,年龄,薪水】。

    ~~~~scala
    import scala.io.StdIn

    /**
    * @Date 2021/3/22 21:00
    * @Version 10.21
    * @Author DuanChaojie
    * trait Animal //Animal是特质,等价于Java中的interface + abstract class
    */
    object InputConDemo01 {
    def main(args: Array[String]): Unit = {
    /**
    * 要求:可以从控制台接收用户信息,【姓名,年龄,薪水】
    */
    println("请输入姓名:")
    val name = StdIn.readLine()
    println("请输入年龄")
    val age = StdIn.readInt()
    println("请输入薪水:")
    val salary = StdIn.readDouble()
    printf("用户的信息为:name=%s, age=%d,salary=%.2f", name, age, salary)

    }
    }
    ~~~~

    ## ☆

  • 相关阅读:
    第三方类AFNetworking(一)
    objective-C nil,Nil,NULL 和NSNull的小结
    DOM解析XML文件
    设置导航栏字体大小,颜色和加粗字体的方法
    数据本地化之沙盒机制
    本地存储Sqlite的用法:
    iOS面试题
    iOS 知识-常用小技巧大杂烩
    怎么升级iOS10教程
    2016WWDC详解
  • 原文地址:https://www.cnblogs.com/huaobin/p/15764408.html
Copyright © 2011-2022 走看看