zoukankan      html  css  js  c++  java
  • Scala基础用法(二)

    流程控制

    • if
          var a = 3;
          if(a > 0){
            println(s"$a > 0")
          }else{
            println(s"$a < 0")
          }
          
      3 > 0
    • whilr
          var b = 3;
          while (b < 10){
            println(b)
            b += 1;
          }
          
      3
      4
      5
      6
      7
      8
      9

    循环

    • 构造一个循环
          var one :Range.Inclusive = 1 to 10
          println(one)
          结果: Range(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
          
          var one :Range.Inclusive = 1 to (10, 2)
          println(one)
          结果: Range(1, 3, 5, 7, 9)
          
          var seqs = 1 until (10, 3)
          println(seqs)
          结果: Range(1, 4, 7)
    • 打印集合
          var seqs = 1 until 10
          for(i <- seqs){
            print(i)
          }
          结果: 123456789
          
          // 循环体没有break,有守卫
         var seqs = 1 until 10
          for(i <- seqs if(i % 2 == 0)){
            print(i)
          }
          结果:2468
    • 打印九九乘法表
          for(i <- 1 to 9){
            for(j <- 1 to 9){
              if(j<=i) print(s"$i * $j = ${i * j}	")
              if(j == 1) println()
            }
          }
          
       简写:
          var num = 0;
           for(i <- 1 to 9; j <- 1 to 9){
               num += 1
              if(j<=i) print(s"$i * $j = ${i * j}	")
              if(j == 1) println()
          }
          println(num)
          num 打印81次
          
       性能优化:
          var num = 0;
          for(i <- 1 to 9; j <- 1 to 9 if(j<=i)){
            num += 1
               print(s"$i * $j = ${i * j}	")
              if(j == 1) println()
          }
          println(num)
          num 打印45次
    • 循环结果收集
          val ints = for(i <- 1 to 10) yield i
          println(ints)
          结果:Vector(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
        
          val ints = for(i <- 1 to 10) yield {
            val num = 2;
            i * num;
          }
          println(ints)
          结果: Vector(2, 4, 6, 8, 10, 12, 14, 16, 18, 20)

    函数

    • 函数无返回值
          var y = fun01()
          def fun01(){
            println("fun001")
          }
          结果:fun001 函数要被调用才能打印
               ()  无结果返回
    • 函数有返回值,需要1.有定义
         def fun002(): Int ={
           3
         }
          var x = fun002();
          println(x)
    • 有参
          def fun03(a:Int): Unit ={
            println(a)
          }
    • 递归
          def fun04(num:Int): Int ={
            if(num == 1){
              num
            }else{
               num * fun04(num - 1)
            }
          }
          val i = fun04(4)
          println(i)
          
          结果: 24 
      return 4 * fun04(4 - 1)
      解析:
      fun04(4 - 1) = 3 * 2 * 1
      2 * fun04(2-1)
      fun04(2-1) = 1
    • 参数默认值
          def fun05 (a:Int = 10, b:String = "abc"): Unit ={
            println(s"$a	$b")
          }
          fun05()
          结果:10    abc
          
          def fun05 (a:Int = 10, b:String = "abc"): Unit ={
            println(s"$a	$b")
          }
          fun05(20)
          结果: 20 abc
          
          def fun05 (a:Int = 10, b:String = "abc"): Unit ={
            println(s"$a	$b")
          }
          fun05(b = "wang")
          结果: 10    wang
    • 匿名函数
          var fun06 = (a:Int, b:Int) => {
            a + b
          }
          val str = fun06(3, 4)
          val str:Int = fun06(3, 4)
          println(str)
          结果:7
          
          var fun06:(Int, Int)=>Int   =   (a:Int, b:Int) =>{
            a + b
          }
          val str:Int = fun06(3, 4)
          println(str)
          结果:7
          
          (Int, Int) => Int (参数类型列表) => 返回值类型
          (a:Int, b:Int) => {a + b}     (参数实现列表) => 函数体
    • 嵌套函数
                方法里面套娃
    • 偏函数引用
          def fun07(date:Date, level:String, msg:String){
            println(s"date=$date	 tp=$level 	 msg=$msg")
          }
          fun07(new Date(), "info", "MESSAGE")
          结果:date=Sat Jan 30 19:02:31 CST 2021     tp=info      msg=MESSAGE
          
          将日志级别恒定为error级别
          var fun = fun07(_:Date, "error", _:String)
          fun(new Date(), "exception...")
          结果: date=Sat Jan 30 19:03:56 CST 2021     tp=error      msg=exception...
    • 可变参数
          def fun08(a:Int*): Unit ={
            for(e <- a){
              println(e)
            }
          }
          fun08(5, 6 , 7)
          
          结果:
          5
          6
          7
          
    • forEach
          def fun08(a:Int*): Unit ={
            a.foreach( (x:Int)=> {
              println(x)
            })
          }
          fun08(5, 6 , 7)
          
          当有一个参数时候
          def fun08(a:Int*): Unit ={
            a.foreach( println(_))
          }
          fun08(5, 6 , 7)
          
          当有一个参数时候
          def fun08(a:Int*): Unit ={
            a.foreach( println)
          }
          fun08(5, 6 , 7)

    高阶函数

    • 函数作为参数
          def computer(a:Int, b:Int, fun:(Int, Int) => Int): Unit ={
            var res: Int = fun(a , b)
            println(res)
          }
          computer(4, 5, (x:Int, y: Int)=>{ x * y})
          computer(4, 5, _+_)
    • 函数作为返回值
          def fun09(i: String): (Int, Int) => Int = {
            def plus(x: Int, y: Int): Int = {
              x + y
            }
            if (i.equals("+")) {
              plus
            } else {
              (x: Int, y: Int) => {
                x * y
              }
            }
          }
      
          computer(4, 5, fun09("+"))
          def computer(a: Int, b: Int, fun: (Int, Int) => Int): Unit = {
            var res: Int = fun(a, b)
            println(res)
          }
          结果: 9
    • 柯里化
          def fun10(a:Int)(b:Int)(c:String): Unit ={
            println(s"$a	$b	$c")
          }
          fun10(3)(8)("aa")
          结果:  3    8    aa
      
      
      应用: 一个可变参数想多个类型,可以拆成多个可变参数
          def fun11(a:Int*)(b:String*): Unit ={
            a.foreach(print)
            println()
            b.foreach(print)
          }
          fun11(1,2,3)("a","b","c")
          结果:
              123
              abc
    • 函数赋值

      def fun12(): Unit ={
      println("我是context")
      }
      val context = fun12
      println(context)
      val func = fun12 _ 这样写只有函数调用的时候才打印
      func()

      结果:

      我是context
      ()
      我是context

  • 相关阅读:
    UVa 116 单向TSP(多段图最短路)
    POJ 1328 Radar Installation(贪心)
    POJ 1260 Pearls
    POJ 1836 Alignment
    POJ 3267 The Cow Lexicon
    UVa 1620 懒惰的苏珊(逆序数)
    POJ 1018 Communication System(DP)
    UVa 1347 旅行
    UVa 437 巴比伦塔
    UVa 1025 城市里的间谍
  • 原文地址:https://www.cnblogs.com/bigdata-familyMeals/p/14352149.html
Copyright © 2011-2022 走看看