美文网首页
第二讲 控制语句和函数

第二讲 控制语句和函数

作者: 农民工进城 | 来源:发表于2018-04-02 23:45 被阅读0次

    本章主要内容

    • if表达式
    • 循环
    • void类型 Unit
    • 函数

    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*******")
       }
    

    相关文章

      网友评论

          本文标题:第二讲 控制语句和函数

          本文链接:https://www.haomeiwen.com/subject/aqefhftx.html