Scala入门【运算符和流程控制】

这篇具有很好参考价值的文章主要介绍了Scala入门【运算符和流程控制】。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

运算符 

        在 Scala 中其实是没有运算符的,所有运算符都是方法。我们只是省去了 .方法名() 中的点  .   和括号 () 
  1. 调用对象的方法时,点 . 可以省略
  2. 如果函数参数只有一个,或者没有参数,括号()可以省略。
//num1 + num2
num1.+(num2)
    val n1 = 12
    val n2 = 12
 
    //正常写法
    println(n1 + n2)
    println(n1 * n2)
    //标准过程
    println(n1.+(n2))
    println(n1.*(n2))

  
    println(7.5toInt.toString)
    //如果函数参数只有一个或者没有,括号()可以省略
    println((7.5.toInt).toString)
    //调用对象的方法 . 可以省略
    println((7.5 toInt) toString)

流程控制

这里只说和Java中稍微不同的地方

1、if 语句

        Scala和Java的 if 语句的基本用法是一致的,包括如果一个分支的逻辑代码只有一行,可以省去大括号{} ,与Java不同之处在于,Scala的 if - else 语句是可以有返回值的,具体取决于哪个分支满足条件。

案例1

import scala.io.StdIn

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

    //输入成绩
    val score: Int = StdIn.readInt()

    //定义结果
    val res:String = if (score < 0 || score > 100){
      "输入错误"
    }else if (score > 0 && score < 60){
      "挂科了,等着重修吧"
    }else{
      "及格了"
    }

    println(res)

  }
}

案例2

如果Scala的返回值类型不一致,我们可以取它们的公共祖先类型。

    //输入成绩
    val score: Int = StdIn.readInt()

    //定义结果
    val res: Any = if (score < 0 || score > 100){
     -1
    }else if (score > 0 && score < 60){
      "挂科了,等着重修吧"
    }else{
      true
    }

    println(res)

案例3-三元运算符

Java中的三元运算符可以用Scala中的 if else 实现

val result: Any = if (score>60) true else  "挂科重修"
println(result)

2、For 循环结构

案例1-包含边界的范围遍历

    //遍历10次  
    //1.范围遍历 to是一个方法的调用,是1这个整型对象调用to方法传入参数10
    for (i <- 1 to 10){
      println(i + "hello scala")
    }
    //完整代码: (我们用上面的写法就好)
    for (i <- 1.to(10)){
      println(i + "hello scala")
    }

案例2-不包含边界的范围遍历

    //遍历9次
    //2.遍历 [1,10) Range默认步长=1,也就是一个一个取
    for (i <- Range(1,10)){
      println(i + "hello scala")
    }
    //效果和上面一样,只不过new Range的话需要指定步长
    for (i <- new Range(1,10,1)){
      println(i + "hello scala")
    }
    //同样 [1,10)
    for (i <- 1 until 10){
      println(i + "hello scala")
    }

案例3-集合遍历

    for (i <- Array(1,5,8)){
      println(i)
    }
    for (i <- List(1,5,8)){
      println(i)
    }
    for (i <- Set(1,5,8)){
      println(i)
    }
    for (i <- Map(("a",1),("b",2),(5,3))){
      println(i)
    }

循环守卫

案例-输出1-10,不输出5

如果用 Java:

for (int i=1;i<=10;i++){
    if(i==5){
        continue;
    }else{
        System.out.println(i);
    } 
}

但是如果用Scala只需要2行:

    //循环守卫
    for (i <- 1 to 10 if i!=5){
      print(i+" ")
    }

 循环步长

输出1、3、5 、7 、9
    //循环步长
    for (i <- 1 to 10 by 2){
      print(i + " ")
    }
    //效果一样 推荐上面的写法
    for (i <- new Range(1,10,2)){
      print(i + " ")
    }
逆序输出10-1
    //设置步长为 -1
    for (i <- 10 to 1 by -1){
      print(i + " ")
    }
    //直接翻转输出
    for (i <- 1 to 10 reverse){
      print(i + " ")
    }
步长为 0.5

前提:步长数据类型为浮点数,范围也必须是小数范围

for (i <- 1.0 to 10.0 by 0.5){
      print(i + " ")
    }

二维数组打印

1,2,3
1,2,3
1,2,3
通常写法 
    for (i <- 1 to 3){
      for (j <- 1 to 3) {
        print(s"第${i}行的内容: " + j + " ")
      }
      println()
    }
精简写法
for (i <- 1 to 3; j <- 1 to 3){
      println(s"第${i}行的内容: " + j + " ")
    }

99乘法表

有手就行

for (i <- 1 to 9){
    for (j <- 1 to i) {
        print(s"${j} * ${i} = ${i * j}  ")
    }
    println()
}
精简写法
for (i <- 1 to 9;  j<- 1 to 9){
    print(s"${j} * ${i} = ${i * j}  ")
        if (j==i) println()
}

引入变量

引入一个变量,这个变量和 i 的值有关。

for (i <- 1 to 10;j = 10 - i){
    println(s"i=${i},j=${j} ")
}

通常的写法

for {
    i <- 1 to 10
    j = 10 - i
}
{
      println(s"i=${i},j=${j} ")
}

九层妖塔

需求:传入参数 n ,输出 n 层妖塔

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

  def print_town(floor: Int): Unit ={
    for {
      i <- 1 to floor
      j = 2 * i - 1   //当前行 * 的个数
      l = floor * 2 - 1 //最后一行的 * 的个数
      k = (l - j) / 2 //当前行空格的个数
    }{
      print(" "*k)
      println("*"*j)
    }
  }

输出结果: 

         *
        ***
       *****
      *******
     *********
    ***********
   *************
  ***************
 *****************
*******************

循环返回值

循环的返回值是将每次循环的结果保存到一个集合当中的,最后一起返回

案例-返回1-10的平方
//返回一个集合
    val res: immutable.IndexedSeq[Int] = for (i <- 1 to 10) yield i * i
    print(res)

运行结果:

Vector(1, 4, 9, 16, 25, 36, 49, 64, 81, 100)

可以看到,代码十分简洁,这也说明了Scala对于处理大数据的方便性。

While 循环

        和 Java 的用法一模一样,但Scala并不推荐使用 While 循环。因为我们如果希望通过while循环得到某个结果,就需要在循环外部定义一个变量(类似于全局变量),在循环内部进行相关的处理,如果在大数据处理的场景下,我们往往是并行处理,这样如果我们每个机器执行的代码块操作的是同一个变量,显然结果是不正确的。所以一般更加推荐的是 for 循环这种可以有返回值的循环。

案例-输出1-10

var a = 1
    while (a <= 10){
      println(a)
      a += 1
    }

循环中断

        Scala并没有 continue 和 break,是为了更好地实现函数式编程,推荐使用函数式的风格解决break和continue的功能,而不是一个关键字。Scala 中使用breakable 控制结构来实现 break 和 continue 功能。

案例-输出0-4 [在2处中]

Breaks.breakable(
      for (i <- 0 until 5) {
        if (i == 3)
          Breaks.break()
        println(i)
      }
    )

原理:Breaks.breakable()的原理其实是通过 try-catch 抛出异常来终止循环。

Scala入门【运算符和流程控制】

 我们自己也可以实现:

try {
      for (i <- 0 until 5) {
        if (i == 3)
          Breaks.break()
        println(i)
      }
    }catch{
      case e: Exception => RuntimeException
    } 
}
最简写法

我们可以直接导入整个Breaks类的所有方法,直接通过方法名来实现,简化代码文章来源地址https://www.toymoban.com/news/detail-502873.html

//下划线 _ 相当于Java的 *
import scala.util.control.Breaks._


breakable(
      for (i <- 0 until 5) {
        if (i == 3)
          break()
        println(i)
      }
    )

到了这里,关于Scala入门【运算符和流程控制】的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【Java入门】运算符

    前言 📕作者简介: 热爱跑步的恒川 ,致力于C/C++、Java、Python等多编程语言,热爱跑步,喜爱音乐的一位博主。 📗本文收录于Java入门篇系列,该专栏主要讲解:什么是java、java的数据类型与变量、运算符、程序的逻辑控制、方法的使用、数组的定义与使、类和对象、继承和

    2024年02月07日
    浏览(54)
  • Rust的Match语句:强大的控制流运算符

    在Rust中, match 语句是一种强大的控制流运算符,用于比较一个值与一系列模式,并执行与第一个匹配的模式对应的代码块。它提供了一种清晰而灵活的方式来处理多个条件,使得代码更加可读、易于理解。 首先,让我们看一下你提供的例子,其中定义了一个枚举 Coin ,表示

    2024年02月20日
    浏览(34)
  • 4、Java入门教程【运算符】

    java中的运算符可以分成以下几组: 算术运算符 关系运算符 位运算符 逻辑运算符 赋值运算符 其他运算符 操作符 描述 例子 + 加法 - 相加运算符两侧的值 A + B 等于 30 - 减法 - 左操作数减去右操作数 A – B 等于 -10 * 乘法 - 相乘操作符两侧的值 A * B等于200 / 除法 - 左操作数除以

    2024年02月16日
    浏览(37)
  • Java基础入门篇——赋值运算符(九)

    赋值运算符的作用是将一个数值、变量或者表达式的值赋给某一个变量。在赋值过程中,运算顺序从右往左,将右边表达式的结果赋值给左边的变量。 【=】赋值,用法:a=10,将10赋值给变量a; 【+=】相加后赋值,用法:a+=b,等价于a=a+b,将a+b的值赋给a; 【-=】相减后赋值,

    2024年02月14日
    浏览(64)
  • 入门篇-其之五-Java运算符(上)

    Java支持多种一元运算符,一元运算符中的“一元”是指一个操作数。我们初中学过的正负号就属于一元运算符,因为正负号后面只有一个数字。 正数使用 + 表示,其中 + 可以省略;负数使用 - 表示 。如果变量的值是数值类型,也可以在变量前面加上正负号。 运行结果: 根

    2024年02月08日
    浏览(36)
  • C++入门编程----C++运算符(8)

    什么是运算符 运算符是让程序执行特定的数学或逻辑操作的符号,用来表示针对数据的特定操作,也称之为操作符。C++运算符分别有算术运算符、关系运算符、逻辑运算符、赋值运算符、位运算符、移位运算符、sizeof运算符、三目运算符、逗号运算符和域解析运算符。 算术

    2024年03月09日
    浏览(40)
  • 入门篇-其之七-Java运算符(下)

    三元运算符(也称作三目运算符),使用 : 和 ? 表示,其格式为: 布尔表达式 ? 表达式1 : 表达式2 如果布尔表达式的计算结果是 true ,那么执行表达式1;否则,如果布尔表达式的计算结果是 false ,则执行表达式2。 表达式1和表达式2计算结果的数据类型必须要和左侧变量定义

    2024年02月08日
    浏览(42)
  • Lingo入门学习笔记(1)——函数与运算符

    本文记录了学习b站浩然玩转高考物理up主的lingo速成视频进行学习笔记 @abs(x):绝对值函数,返回x的绝对值; @cos(x):余弦函数,返回x的余弦值(x的单位是弧度); @exp(x):指数函数,返回数学公式: $e^{x} $的值(其中e为自然对数的底); @floor(x):取整函数,返回x的整数部分(向最

    2024年02月07日
    浏览(30)
  • JavaScript系列从入门到精通系列第九篇:JavaScript中赋值运算符和关系运算符以及Unicode编码介绍

    文章目录 一:赋值运算符 1:= 2:+= 3:-= 4:*= 5:/= 6:%= 二:关系运算符  1:数值类型关系运算 (一): (二):= (三): (四):= 2:其他类型关系运算 三:Unicode编码表         =右侧的值可以赋值给左侧的变量。         上边这两个写法是一样的。                 

    2024年02月08日
    浏览(57)
  • 【JavaScript_1】入门知识、数据类型、运算符

    1、var变量赋值不需要强制转换,可以直接进行赋值。 var a=1; a=“hello”; 2、JavaScript的工作方式:先解析代码,获取所有被声明的变量,然后再一行一行地运行。 因此导致所有的变量声明语句都会被提升到代码的头部,这就叫做变量提升。 eg: console.log(a); var a=1;-----------var a;

    2024年02月12日
    浏览(50)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包