第二讲 控制语句和函数

2018-04-02  本文已影响0人  农民工进城

本章主要内容

2.1 if表达式

scala的 if表达式和 java差不多,如: if(a>b)a else b。
在scala中,每一个表达式,都是一个类型,例如:if(1>0) 1 else 0,是int类型。
但是有一个例外,如果只有if没有else,例如:if(1<0)1,永远不会满足条件,因此不会输出,但是在scala中每一个表达式都是一个类型,为了解决这个问题引入了Unit,用()来表示,所以上书表达式等同于if(1<0)1 else()

2.2 循环

scala有和java一样的while循环和do循环:

while循环格式如下:

     var n=3;
      while(n>0){
        print(n);
        n-=1;
      }

do循环格式如下:

     var n=3;
     do{
        print(n);
        n-=1;
      } while(n>0)

但是没有和java结构一样的for循环,但是有功能类似的for语句,格式如下:
语法结构是:

for(i <- 表达式){
//do something
}
  for(n <- 1 to 3){
          print(n)
   }

util关键字

  for(n <- 1 until 4){ //1-4 不包括4
          print(n)
   }

2.3 scala的break

break语法如下:

// import following package
import scala.util.control._

// create a Breaks object as follows
val loop = new Breaks;

// Keep the loop inside breakable as follows
loop.breakable {
   // Loop will go here
   for(...){
      ....

      // Break will go here
      loop.break;
   }
}

举个例子:

def main(args: Array[String]) {
      var a = 0;
      val numList = List(1,2,3,4,5,6,7,8,9,10);
      val loop = new Breaks;

      loop.breakable {
         for( a <- numList){
            print( a );
            if( a == 5 ){
              println();
               loop.break;
            }
         }
      }
      println( "*****end*****" );
   }

运行结果:


break.png

2.4 高级for循环和for推导式

可以用 变量<- 表达式 的形式,提供多个生成器;
例子:乘法口诀表:

    for (i <- 1 to 9; j <- 1 to 9) {
      if (i >= j) {
        print(j + "*" + i + "=" + (i * j) + "  ")
        if (i == j) {
          println();
        }
      }
    }

每个生成器都会有一个类似于过滤器的if语句;
例如:

 for (i <- 1 to 5; j <- 1 to 5 if i==j) {
        print(j + "*" + i + "=" + (i * j) + "  ")
    }

运行的结果是:


过滤.png

另外,scala的for循环中可以引入任意多的变量,比如
还可以这样

for (i <- 1 to 5; from=8-i;j <- from to 5 ) {
        println(j + "*" + i + "=" + (i * j) + "  ")
}

运行结果如下:


结果.png

for循环体的前面使用 yield 关键字:如果在for循环体前面加上yield关键字,则说明该for循环将输出1个集合,而每次循环的输出做为该集合中的一个元素。
例如:

var result=for (i <- 1 to 5) yield {
       if(i%2==0){
        i
      }else{
        0
      }
    }
    println(result)

运行的结果是:


结果.png

2.5 函数的定义

Scala函数声明具有以下形式 -

def functionName ([list of parameters]) : [return type]

如果不使用等号和方法体,则隐式声明抽象(abstract)方法。

函数定义

Scala函数定义具有以下形式 -
语法

def functionName ([list of parameters]) : [return type] = {
   function body
   return [expr]
}

这里,返回类型可以是任何有效的Scala数据类型,参数列表将是由逗号分隔的变量列表,参数列表和返回类型是可选的。与Java非常相似,返回语句可以与表达式一起使用,以防函数返回值。
例子1:求某个值的绝对值

 def abs(i:Int):Int={
     if(i>=0){
       i
     }else{
       -i
       }
   }

例子2:递归求阶乘

def digui(i:Int):Int={
     if(i<=0){
       1
     }else{
       i*digui(i-1)
       }
   }

例子3:无返回值的函数

 def dayin(str:String):Unit={
     print("******start*******")
     print(str)
     print("******end*******")
   }
上一篇下一篇

猜你喜欢

热点阅读