05基本运算 与6内建控制-if语句

64 阅读5分钟

Scala的位运算符

常用的位运算符如下:

1.   &   按位与运算符。0&1 = 0,  1&0= 0 , 0&0 = 0, 1&1 = 1

2.   |   按位或运算符。0|1 = 1,  1|0= 1 , 0|0 = 0, 1|1 = 1

3.   ^   按位异或运算符。0^1 = 1,  1^1= 0, 0^0 = 0

4.   ~   按位取反运算符

5.   << 左移运算符。右边补零,放大。

6.   >> 右移运算符。左边补零,缩小。

object base09 {
  def main(args: Array[String]): Unit = {
    // 位运算:把10进制的数转成二进制表示,其中的某个数字
    /**
     * 10进制     2进制
     * 0          0
     * 1          1
     * 2          10
     * 3          11
     * 4          100
     * 5          101
     * 6          110
     *
     * & 按位与运算: 1&1 = 01&0 = 00&0 = 01&1 = 1
     *
     * 4&5
     *       4 -> 1  0  0
     *       5 -> 1  0  1
     *       & --------------
     *
     *  | 按位或运算,0|1 = 1, 1|0 = 1, 0|0 = 0, 1|1 = 1
     *  4|5 --->
     *     4 -> 1 0 0
     *     5 -> 1 0 1
     *     -----------
     *
     **/

    println(s"6 & 2 = ${ 6&2 }")
    println(s"6 | 2 = ${ 6|2 } ")

  }
}

最后结果

屏幕截图 2025-09-17 092241.png

(二)Scala中运算符的优先级

object base10 {
  def main(args: Array[String]): Unit = {
    val result = 10 - 2 + 3 * 4 / 2
    println(result) // 问题1
    val a = true
    val b = false
    val c = false

    /* 优化成更易于 || */
    println(a || b && c) // a || b && c 等同于 a || (b && c)

  }
}

最后结果

屏幕截图 2025-09-17 092604.png

基本规则:

  1. 乘 (*) 除 (/) 模 (%) > 加 (+) 减 (-)
  2. 算术 (+-*/%) > 关系 (><>=!=) > 赋值 (=)
  3. && >||

屏幕截图 2025-09-17 093656.png

屏幕截图 2025-09-17 093700.png

Scala相等 自增减 浮点数精度

(三)Scala的相等性

提问:如何判断两个值相等?

在Scala中,有两种方式:

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

  2. eq 引用比较

object base10 {
  def main(args: Array[String]): Unit = {
       var s1 = "hello"
       var s2 = new String("hello")
       var s3 = new String("hello")
       println(s1 == s2) // true
       println(s1 eq s3) // false
    }
}

结果如图:

屏幕截图 2025-09-17 102323.png

(四)Scala中的自增和自减运算

在Scala中没有++和--这样的自增和自减运算符。

那么要想在Scala中实现类似于Java中的自增和自减运算,可以使用如下的赋值运算符进行替代。

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

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

(五)浮点数精度问题

由以上(三)(四)(五)得出的代码:

object base10 {
  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
  }
}

结果如图

屏幕截图 2025-09-17 094437.png

(六)大数问题

一种整数都有自己的表达范围,例如Int类型的最大值是2147483647,一旦超过了这个范围就会报错,或者是导致异常。

object base12 {
    def main(args: Array[String]): Unit = {

      val a = 2147483647
      val b = 1
      val c = (a + b) / 2 //Bug
      val e = a + (a - b)/2 // 高手计算平均
      println(c)

      // 大数字计算
      // val c:Double = 11111111111111111111111111111111 * 22222222222222222222222222222222
      // val d = BigInt("11111111111111111111111111111111") * BigInt("11111111111111111111111111111111")
      // println(d)
    }

}

结果如图

image.png

06内建控制-if语句

  1. 单分支 if(){}

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

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

(一)if语句的格式和执行流程

Scala中的if语句的语法格式如下:

if(布尔表达式 1){
// 如果布尔表达式 1 为 true 则执行该语句块
}else if(布尔表达式 2){
// 如果布尔表达式 2 为 true 则执行该语句块
}else if(布尔表达式 3){
// 如果布尔表达式 3 为 true 则执行该语句块
}else {
// 如果以上条件都为 false 执行该语句块
}

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

判断是否成年,并输出

object base13 {
  def main(args: Array[String]): Unit = {
    // 从键盘输入一个年龄,判断是否成年
    //1.获取用户输入的数字
    //2.判断
    //3.输出结果
    print("请输入年龄")
    val age = scala.io.StdIn.readInt()
    if (age >= 18) {
      println("成年")
    }  else {
      println("未成年")
    }
  }
}

输出结果

屏幕截图 2025-09-17 103227.png

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

object base14 {
  def main(args: Array[String]): Unit = {
    print("请输入正方形的边长a:")
    val a = scala.io.StdIn.readDouble()
    print("请输入长方形的长b:")
      val b = scala.io.StdIn.readDouble()
    print("请输入长方形宽c:")
    val c = scala.io.StdIn.readDouble()
    val square = a * a
    val rectangle = b * c
    //正方形面积打
    if (square > rectangle) {
      println("SQUARE")
      // 长方形面积大
    } else if (square < rectangle) {
      println("RECTANGLE")
      //一样大
    } else {
      println("SAME")
    }
}
}

结果如图:

image.png

例子3:输入正整数分数,输出对应的等级符号。规则如下:[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 score = scala.io.StdIn.readDouble()
    if (score >= 90 && score <= 100) {
      println("A")
    } else if (score >= 80 && score <= 89) {
      println("B")
    } else if (score >= 70 && score <= 79) {
      println("C")
    } else if (score >= 60 && score <= 69) {
      println("D")
    } else if (score >= 0 && score <= 59) {
      println("E")
    }
      else  {
      println("输入分数有误")
    }
  }
}

输出结果:

image.png

if语句的返回值

[提问]:java中的if有返回值吗?

Scala中的if语句是有返回值的,它的执行过程如下:

val a= if(布尔表达式) {
表达式1
} esle{
表达式2
}

如果布尔表达式为true,则会把表达式1的值赋给变量a。如果布尔表达式为false,则会把表达式2的值赋给变量a。即如果布尔表达式为true,a=表达式1,否则,a=表达式2。

示例:判断一个数是奇数还是偶数

var i = 2;
var c = if(i%2 ==0){"偶数"} else {"奇数"}

案例四

改造案例三的代码,通过if的返回值来获取等级。

def main(args: Array[String]): Unit = {

    val a = StdIn.readInt() // 从键盘输入两个数,a、b

    val b = StdIn.readInt()  
val c = _________________  //  用c来保存它们的较大者

    println(c) // 输出较大者

  }