(五)基本运算+内建控制-if语句

50 阅读4分钟
(一)Scala的位运算符
常用的位运算符如下:
  • '&'   按位与运算符。0&1 = 0,  1&0= 0 , 0&0 = 0, 1&1 = 1
  • '|'   按位或运算符。0|1 = 1,  1|0= 1 , 0|0 = 0, 1|1 = 1
  • '^'   按位异或运算符。0^1 = 1,  1^1= 0, 0^0 = 0
  • '~'   按位取反运算符
  • '<<' 左移运算符。右边补零,放大。
  • '>>' 右移运算符。左边补零,缩小。
object Base09 {
  def main(args: Array[String]): Unit = {
    // 位运算:把10进制的数转成2进制表示,其中的某个数字
    /**
     * 10进制        2进制
     * 0              0
     * 1              1
     * 2              10
     * 3              11
     * 4              100
     * 5              101
     * 6              110
     * ----------------------
     * & 按位与运算符。0&1 = 01&0 = 0, 0&0 = 0. 1&1 = 1
     *  6&2 =
     * 4&5----> 4
     *     4 -> 1  0  0
     *     5 -> 1  0  1
     *     &---------------
     *          1  0  0  (4)
     *
     *  | 按位或运算符。0|1 = 1,1|0 =1,0|0 = 0,1|1 = 1
     *   4/5 ----> 5
     *      4 -> 1  0  0
     *      5 -> 1  0  1
     *      |-------------------
     *           1  0  1  (5)
     */
    println(s=s"4|5=${ 4|5 }")
  }

}
(二)Scala中运算符的优先级
基本规则:
  1. 乘(*)除(/)模(%) > 加(+)减(-)

  2. 算术(+-*/) > 关系(><>=!=) > 赋值(=)

  3. && > ||

  • 例如
object Base10 {
 def main(args: Array[String]): Unit = {
   val a = true
   val b = false
   val c = false
   /** &&的优先级要高于 || */
   println(a || b && c) // 结果为true
 }

}
(三)Scala的相等性

在Scala中,有两种方式:

  1. == 比较的对象只有数值,只要==两边的值相等,就返回true。

  2. eq 引用比较

(四)Scala中的自增和自减运算+浮点数精度问题
  • ++:用赋值运算符 +=1代替++。

  • --:用赋值运算符 -=1代替--。

object Base11 {
  def main(args: Array[String]): Unit = {
    val a = 0.1
    val b = 0.2
    val c = 0.3
    // println(a + b == c) 
    println(1 + 2 == 3) //true

    println(0.1 + 0.2 == 0.3) //false

    println(BigDecimal(0.1) + BigDecimal(0.2) == BigDecimal(0.3) )

    println(0.1 + 0.1 == 0.2) //true

  }

}
(六)大数问题
例如
object Base12 {
  def main(args: Array[String]): Unit = {
    val a = 2147483647
    val b = 1
    // val c = (a + b) / 2 //Bug
    val c = a - (a - b)/2 // 高手计算平均数
    println(c)

    // 大数字计算
    // 1111111111111 * 2222222222221
    // val c:Double = 111111111111111111111111f * 11111111111111111111111111111111111111111111
    // val d = BigInt("11111111111111111111111111111111111111") * BigInt("11111111111111111111111111111111111111")
    // println(c)
    // println(d)
 

  }
}

内建控制-if语句

(一)if语句的格式和执行流程
注意
  1. 单分支。 if(){}

  2. 双分支   if(){} else {}

  3. 多分支   if(){} else if(){} else if(){} else {}

(二)案例一判断是否成年

编写程序实现:提示用户输入年龄,判断是否成年。

object Base13 {
  def main(args: Array[String]): Unit = {
    // 1.获取用户输入的数字
    // 2.判断
    // 3.输出结果

    print("请输入年龄:")
    val age = scala.io.StdIn.readInt()
    if (age >= 18 ){
      println("成年")
    }else {
      println("未成年")
    }

  }

}
(三)案例二比较正方形和长方形面积大小

输入一个正方形的边长(a)及一个长方形的长与宽(b、c),然后比较两个图形的面积。如果长方形面积大,输出 “RECTANGLE”;如果正方形面积大,输出 “SQUARE”,如果一样大,输出 “SAME”。

object Base14 {
  def main(args: Array[String]): Unit = {
    print("请输入正方形的边长:")
    val a = scala.io.StdIn.readInt()

    print("请输入长方形的长:")
    val b = scala.io.StdIn.readInt()

    print("请输入长方形的宽:")
    val c = scala.io.StdIn.readInt()

    if (b*c > a*a ){
      println("长方形面积大")
    }else if(b*c < a*a){
      println("正方形面积大")
    } else {
      println("一样大")
    }

  }

}
四)案例三输入分数输出等级

[案例]输入正整数分数,输出对应的等级符号。规则如下:[90,100] 为 A 等;[80,89]  为 B 等;[70,79]  为 C 等;[60,69]  为 D 等;[0, 59]  为 E 等;

object Base15 {
  def main(args: Array[String]): Unit = {
    // 读取用户输入的分数
    print("请输入分数:")
    val a = scala.io.StdIn.readInt()
    // 根据分数判断等级并输出
    if ( 90 <= a && a <= 100) {
      println("A等")
    } else if (80 <= a && a <= 89) {
      println("B等")
    } else if (70 <= a && a <= 79) {
      println("C等")
    } else if (60 <= a && a <= 69) {
      println("D等")
    } else if (0 <= a && a <= 59) {
      println("E等")
    } else {
      "输入的分数不符合要求,请输入0-100之间的正整数"
    }
   //  println(grade)
  }

}