Scala入门3之【条件表达式、循环】

1、条件表达式

\quad \quad 条件表达式就是if表达式,if表达式可以根据给定的条件是否满足,根据条件的结果(真或假)决定执行相应的操作

1.1 if 语句

\quad \quad if 语句有布尔表达式及之后的语句块组成。

语法:

if(布尔表达式)
{
   // 如果布尔表达式为 true 则执行该语句块
}

例子:

scala> val x=20
x: Int = 20

scala> val result=if(x>=20){println(x)}
20
result: Unit = ()

1.2 if…else 语句

\quad \quad if 语句后可以紧跟 else 语句,else 内的语句块可以在布尔表达式为 false 的时候执行。

语法:

if(布尔表达式){
   // 如果布尔表达式为 true 则执行该语句块
}else{
   // 如果布尔表达式为 false 则执行该语句块
}

例子:

scala> val sex="male"
sex: String = male
scala> val result=if(sex=="male") 1 else 0
result: Int = 1

块表达式:

  • scala中,使用{}表示一个块表达式
  • 和if表达式一样,块表达式也是有值的
  • 值就是最后一个表达式的值
scala> val a={
     | println("3+4")
     | 3+4
     | }
3+4
a: Int = 7

scala> print(a)
7

1.3 if…else if…else 语句

\quad \quad if 语句后可以紧跟 else if…else 语句,在多个条件判断语句的情况下很有用。

语法:

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

1.4 if…else 嵌套语句

\quad \quad if…else 嵌套语句可以实现在 if 语句内嵌入一个或多个 if 语句。

语法:

if(布尔表达式 1){
   // 如果布尔表达式 1 为 true 则执行该语句块
   if(布尔表达式 2){
      // 如果布尔表达式 2 为 true 则执行该语句块
   }
}

2、循环

\quad \quad 在Scala中,可以使用for和While,但一般推荐使用for表达式,因为for表达式语法更简洁

== to/range/unti==用法

  • nums1 to nums2:[nums1 nums2],左闭右闭
scala> 1 to 10
res12: scala.collection.immutable.Range.Inclusive = Range(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
scala> 1.to(10)
res14: scala.collection.immutable.Range.Inclusive = Range(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
scala> sum2(1,2)
  • range(nums1,nums2,n):[nums1 nums2) 左闭右开,其中n为间隔,且n不能为0
scala> Range(1,10)
res13: scala.collection.immutable.Range = Range(1, 2, 3, 4, 5, 6, 7, 8, 9)
scala> Range(1,10,2)
res16: scala.collection.immutable.Range = Range(1, 3, 5, 7, 9)
// 倒序
scala> Range(10,1,-1)
res17: scala.collection.immutable.Range = Range(10, 9, 8, 7, 6, 5, 4, 3, 2)
  • nums1 until nums2 :[nums1 nums2):左闭右开
scala> 1 until 10
res18: scala.collection.immutable.Range = Range(1, 2, 3, 4, 5, 6, 7, 8, 9)

scala> 1.until(10)
res19: scala.collection.immutable.Range = Range(1, 2, 3, 4, 5, 6, 7, 8, 9)
  • .toList:区间转化为List
// a为区间类型
a.toList
// 直接转换
scala> val list1=(Range(1,5)).toList
list1: List[Int] = List(1, 2, 3, 4)

scala> val list2=(1 to 5).toList
list2: List[Int] = List(1, 2, 3, 4, 5)

2.1 for 循环

2.1.1 语法

语法:

for(  x <- 表达式/数组/集合 ){
  // 表达式;
}

例子:

scala> for (i <- 1 to 3){
     | println(i)
     | }
1
2
3
  • 在 for 循环 中你可以使用分号 (;) 来设置多个区间,它将迭代给定区间所有的可能值。以下实例演示了两个区间的循环实例:
scala> for (a <- 1.to(3);b <- 1 to 2){
     |  println( "Value of a: " + a );
     | println( "Value of b: " + b );
     | }
Value of a: 1
Value of b: 1
Value of a: 1
Value of b: 2
Value of a: 2
Value of b: 1
Value of a: 2
Value of b: 2
Value of a: 3
Value of b: 1
Value of a: 3
Value of b: 2

2.1.2 for 循环集合

语法

for( x <- List ){
   statement(s);
}
  • 以上语法中, List 变量是一个集合,for 循环会迭代所有集合的元素。
  • 例子:
scala> val numsList=List(1,2,3,4)
numsList: List[Int] = List(1, 2, 3, 4)

scala> for (a <- numsList){
     | println(a)
     | }
1
2
3
4

2.1.3 for 循环过滤

\quad \quad Scala 可以使用一个或多个 if 语句来过滤一些元素。

  • 以下是在 for 循环中使用过滤器的语法。
for( var x <- List
      if condition1; if condition2...
   ){
   statement(s)};
  • 例子:
scala> val numsList=List(1,2,3,4,6,7,10)
numsList: List[Int] = List(1, 2, 3, 4, 6, 7, 10)

scala> for (a <- numsList
     | if a!=3;if a<8)
     | {
     | println(a)
     | }
1
2
4
6
7

2.1.4 for 使用 yield

  • 在for 循环体中,可以使用yield表达式构建处一个集合,我们把使用yield的for表达式称之为推导
  • 你可以将 for 循环的返回值作为一个变量存储。

语法

var retVal = for{ var x <- List
     if condition1; if condition2...
}yield x
  • 注意大括号中用于保存变量和条件,retVal 是变量, 循环中的 yield 会把当前的元素记下来,保存在集合中,循环结束后将返回该集合。

例子:

object for_u {
  def main(args:Array[String]){
    var a=0;
    val numList= List(1,2,3,4,5,8,9,10)
    // for循环
    var retval= for{a<- numList
                     if a!= 3;if a<8}yield a
    // 输出返回值
    for(a <- retval){
      println(a)
    }
  }
  }

2.2 while循环

\quad \quad 只要给定的条件为 true,Scala 语言中的 while 循环语句会重复执行循环体内的代码块。
语法

while(condition)
{
   statement(s);
}
  • 在这里,statement(s) 可以是一个单独的语句,也可以是几个语句组成的代码块。

  • condition 可以是任意的表达式,当为任意非零值时都为 true。当条件为 true 时执行循环。 当条件为 false 时,退出循环,程序流将继续执行紧接着循环的下一条语句。

例子:

object while_test {
  def main(args:Array[String]): Unit ={
    var a=10;
    while(a<15){
      println(a)
      a+=1
    }
  }

}

2.3 do…while

  • 不像 while 循环在循环头部测试循环条件, Scala 语言中,do…while 循环是在循环的尾部检查它的条件。

  • do…while 循环与 while 循环类似,但是do…while 循环会确保至少执行一次循环。

语法:

do {
   statement(s);
} while( condition );
  • 注意,条件表达式出现在循环的尾部,所以循环中的 statement(s) 会在条件被测试之前至少执行一次。

例子

object while_test {
  def main(args:Array[String]): Unit ={
    var a=16;
    do{
      println(a)
      a+=1
    }while(a<15)
  }

}

结果:
在这里插入图片描述

2.4 无限循环

\quad \quad 如果条件永远为 true,则循环将变成无限循环。我们可以使用 while 语句来实现无限循环:

object Test {
   def main(args: Array[String]) {
      var a = 10;
      // 无限循环
      while( true ){
         println( "a 的值为 : " + a );
      }
   }
}
  • 以上代码执行后循环会永久执行下去,你可以使用 Ctrl + F2 键来中断无限循环。

2.5 break 和 continue语句

  • break 语句可以用于跳出循环,可以用在 for 循环、while 循环、switch 循环中。当我们在一个循环中使用了break 语句,则会中断循环,但是仍会继续执行循环之后的代码哟。

  • continue 语句用于在发生指定的条件时,中断循环中的一个迭代,然后继续循环中的下一个迭代。

  • 与 break 语句不同的是, break 会执行跳出整个循环,而 continue 只是跳出本次循环,继续下一次循环。也就是说假如一共有10次循环,在第 5 次循环时使用 break,后面的循环不会再执行。但是如果在第 5 次循环的时候执行 continue ,只有第 5 次循环不会执行,但会继续执行第6次、7次…等循环。

  • 在Scala 中,break/ continue关键字被移除了

  • 如果一定要使用break/ continue,就需要使用scala.util.control._包的Break类的breable和break方法

break语句

  • 导入Breaks包import scala.util.control.Break._
  • 使用breable将for表达式包起来
  • for 表达式中需要退出循环的地方,添加break()方法调用

语法

// 导入以下包
import scala.util.control.Break._

// 在 breakable 中循环
breakable{
    // 循环
    for(...){
       ....
       // 循环中断
       break();
   }
}

例子:

import scala.util.control.Breaks._
object for_u {
  def main(args:Array[String]){

    breakable{
      for (i <- 1 to 20){
        if(i >=  10)break()
        else println(i)
      }
    }
  }
}

在这里插入图片描述
实现continue

  • continue的实现与break类似,但有一点不同:

  • 实现break是用breakable{}将整个for表达式包起来,而实现continue是用breakable{}将for表达式的循环体包含起来就可以了

例子:

  • 打印1-20的数字,使用for表达式来遍历,如果数字能整除10,不打印。
import scala.util.control.Breaks._
object for_u {
  def main(args:Array[String]){
    for (i <- 1 to 20){
      breakable{
        if(i % 10==0)break()
        else println(i)
      }
    }
  }
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值