scala随笔记

  //语法1 变量定义 两种方式 var(java变量)val(java常量),变量值可改变
  //常量值不可变
  //变量定义可声明类型,一般不需要指定类型,指定类型的方式   :int | :String  |  :Char  |  :Bety  等

  //每行代码结尾的分号“;” 默认省略,return 关键字必须省略 当多行代码在一行显示的时候,有必要的情况下需要使用“;”分号把多条语句进行隔开
  //salaca 中有一个unit类,相当于java中的void 当if(1>2) 1  执行时返回的值即为void
  // 当需要混合类型的时候使用 :Any 相当于多种基本类型的父类型
  //类型强转 a.asInstanceOf[希望类型]   列入val mm=m.asInstanceOf[int]

  def main(args : Array[String]){
       val s="hello"
       var a="word"
       a=s+a
       println("--->"+a)
       val m=100
       val l= if(m<1)100 else 1
       val o=if(m<1){  1}else{    3  }
       println(o)

    for(i <-1 to 10){
      println(i)

    }

    //for循环 1 to 10 是指定一个类型为Range的有序数组值Rang(1,2,3,4,5,6,7,8,9,10)
    // to 前后都取值(能取到最末位值)   until 前闭后开 (不取到最后的值)
    val str="hello123"
     for(s<- str)println(s)
    //遍历字符串的每个字符
    //取字符串的指定下标字符
    val ss =str.charAt(1)
    //数组定义
    val arr= Array(1,2,3,4,5,6,7,8,9,10)
    //数组下标取值 arr(index)  数组长度 arr.length
    arr(1)
    arr.length
    arr.last
    //遍历数组
    for(s <- arr)println(s)


    //双重for循环  i 对应的循环为外层循环  j的循环为内层循环
    for(i<- 1 to 10;j<- 1 to 100)println(i*j)
    //双重循环+条件过滤
    for(i<- 1 to 10;j<- 1 to 100 if i !=j )println(i*j)
    //将原数组数据进行处理生成新的数组
    //使用yeild生成一个新的同等长度的数组或者集合(生成对象类型取决于遍历的对象类型)并将原数组的值全部放大10倍
    for(i<- arr)yield i*10
    //wheil(){}循环与 do{}wheil(){}循环
    


    //函数式编程解决方式
    //scala中方法与函数有区别
    //map() 操作方法   _ * 10 方法 (_ * 10)等同于(i=>i*10)(匿名函数没有函数名,只有函数逻辑) 【逻辑:将函数遍历的过程中的值付给i,然后给i * 10 放入新的集合或数组】
    arr.map(_*10)

    //scala与java的基础运算符是一样的 加:‘+’ 减: ‘-’ 乘: ‘*’  除: ‘/’ 磨: ‘%’ 等于 '=' ,但是scala中运算符重载成方法
    //例如 1+2 = 1.+(2)
    //过滤arr数组 取当遍历的元素值磨2等于0的元素值(偶数),再对结果数组进行map()操作,操作方法_ * 10
    arr.filter(i=> i%2==0).map(_*10)
    //scala 中的变长数组与定长数组的不同生命方式与互相转换
                    //定长数组
                    val arry= Array[Int](10)
                    //变长数组
                    var arry1=ArrayBuffer[Int]()
    //互相转换
                    arry.toBuffer
                    arry1.toArray
                    //数组翻转
                    arry.reverse

    //无返回值的方法定义为:  def 方法名(参数列表):Unit={代码块} 或者省略 :Unit= 再或者省略 :Unit
    def ms(x:Int,y:Int):Unit={x+y}

    //有返回值类型的方法定义格式:def 方法名(参数列表):Int={代码块} 一般情况返回值类型也不用指定
    //当自定义方法与系统方法重名或冲突时,scala会给定义的方法其别名,调用时使用别名调用,否则会调用到系统的方法
    //scala提供类型自动推断,不必要的情况可以不用指定返回值类型,注:【递归方法必须指定返回值类型】

    //scala函数定义 函数标志  =>  def method 方法定义  function 函数
    //在函数中 => 的前面为函数参数列表 后部分为函数体
     ( x :Int , y :Int ) => x+y //没指定函数名,匿名函数

      //调用asf(1,100) 返回值101 调用方式与方法调用相同,不同之处在于 函数可以作为参数传入方法
      val asf= ( x :Int , y :Int ) => x+y //指定函数名为 asf  简写
      val asf2 :( Int ,Int ) => Int ={(x,y)=>x+y}//完整的函数定义 指定返回值类型

    /**
      * val asf2             定义函数名
      * :(Int,Int) =>Int     指定函数列表与函数运算返回结果类型 Int
      * ={(x,y)=>x+y}        指定函数返回值等于参数列表(x,y)赋值给x+y的运算表达式中
      */

      //scala的基本数据类型转换 Int.toDouble  调用无参方法时可以不加大括号直接使用  .方法名 即可

      //使用接口声明函数方式 Function系列接口 是根据函数传入参数列表相关的
      //使用接口定义函数时 new Function[]传入的参数列表中的最后一位是指定返回值的类型,如下函数中Double
      var a=new Function2[Int,Int ,Double] {
        override def apply(v1: Int, v2: Int): Double =
        {
          (v1+v2).toDouble
        }
      }
       //无返回值类型函数定义返回值类型必须声明位Unit
       var a1=new Function2[Int,Int,Unit] {
         override def apply(v1: Int, v2: Int):Unit=
         {
           println(v1+v2)
         }


       }

  }
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值