Scala学习第二天

方法

定义方法的基本语法

  • def methName(参数名:参数类型,参数名:参数类型) :{return type}={
  • //f方法体
  • }

说明:1.在定义参数时  参数类型不能省略

           2.返回值类型可以省略,由Scala编译器自动推断

           3.返回值可以不写return,默认是{}块表达式的值

           4 在递归方法中不能省略返回值类型  

//普通方法 
def add (a03:Int,b03:Int) = {
     a03+b03
    }
    var c=add(55,10)
    println(c)
    println(add(55,10))


def add01(a04: String, b04: String) = {
      val c = a04 + b04
      c
    }

    var cc = add01("hello", "Scala")
    println(cc)
    println(add01("hello", "  Scala"))


//递归方法   需要声明返回值类型
    def daa(a05: Int, b05: Int) :Int={
      val s = a05 + b05
      if (a05 > 0) {
        daa(a05 - 1, b05 - 1)
      }
      return s
    }

    println(daa(50, 10))

方法参数:

  •    变长参数:如果方法类型不固定,可以定义方法参数是变长参数
       在参数类型后面加上  *  号,表示参数可以是0个或者多个
  •       默认参数:在定义方法时可以给参数定义一个默认值
  •       带名参数:在调用方法时,可以指定参数名称来进行调用
//变长参数
def add05(num:Int*)={
      num.sum
    }
    println(add05(1,5,3,6,9,6,3,5,3,6,7))
    println(add05())
//默认参数
    def add06(i:Int=0,j:Double=0.0):Double={
      return i+j
    }
    println(add06(5,6.0))
    println(add06())
//带名参数
  def add06(i:Int=0,j:Double=0.0):Double={
      return i+j
    }
    println(add06(i=6))

方法的调用方式

  •     后缀调用法   和Java相同
  •     中缀调用法      语法:对象名   方法名  参数
  •             中缀调用法引申:操作符即方法    1+1     (类似于中缀调用法)  
  •                       (在Scala中,+-*/%  这些操作符和java一样,但在Scala中
  •                          所有的操作符都是方法,操作符是一个方法名字。是符号的方法)
  •    花括号调用法        使用块表达式的返回值  =方法的参数(方法参数只有一个时,才使用花括号调用法)
  • 无括号调用法    如果方法没有参数,可以省略方法名后面的括号
//后缀调用法
   val a10= Math.abs(-1)
    println(a10)

//    中缀调用法
    1 to 10
   val a11= Math abs -1
    println(a11)


//    操作符即方法
    1 + 1


//    花括号调用法
    Math.abs{
      println("求绝对值")
      -1
    }

//    无括号调用法
    def printHello(): Unit ={
      println("hello")
    }
    println(printHello)

函数

  • 语法:val 函数变量名=(参数名:参数类型,参数名:参数类型)=>函数体
  •            函数是一个对象
  •            有输入参数和返回值
  •            函数定义不需要使用def 定义
  •            无需指定返回值类型

方法和函数的区别:(函数是一个对象,而方法不是一个对象)

  • 方法是隶属于类和对象的,在运行时,它是加载到JVM的方法方法区中
  • 可以将函数对象赋值给一个变量,在运行时加载到JVM中堆内存中
  • 函数是一个对象,继承于FunctionN,函数对象有apply,curried,toString,tupled这些方法,方法则没有

方法转化成一个函数

  • 有时候需要将方法转化成函数,作为变量的传递
  • 使用_即可将方法转化成函数
 val add11=(x:Int,y:Int)=>x+y

    def add12(x:Int,y:Int):Int=x+y
    val aa15 =add12     //说明:方法不能赋值给变量
    var bb15 =add11
    println(aa15)
    println(bb15)




//将方法转化成一个函数

 def add12(x:Int,y:Int):Int=x+y
    val aa15 =add12        //说明:方法不能赋值给变量
    val aa15 =add12 _      //可以将方法转换成一个函数,从而可以达到给方法赋值的效果
    var bb15 =add11
    println(aa15)
    println(bb15)

数组

  • 定长数组:

  • 定长数组指的是数组长度是不可以被改变的,而数组的元素是可以被改变

  •   定义数组的语法:通过指定长度定义数组      val/var   变量名=new Array[元素类型] (数组长度)

  • 用元素直接初始化数组:  val/var    变量名 = Array(元素1,元素2,元素3,元素4,。。。。)

  •             说明:在scala中使用()来获取元素,泛型使用[]来指定

  • val a= new Array[Int](100)   //表示我们要创建一个整形数组,长度为100
        a(0)=110                     //设置第一个元素110,在Scala中指定元素使用括号
        println(a(0))
        println(a(1))
    
    
    //查看数组
      val a19=Array("1","2",3)
       println( a19(2))
    
    //修改数组
    a19(0)="aa"

    变长数组:变长数组指的是数组的长度是可变的,可以往数组中添加,删除元素

  • 创建变长数组,需要提前导入ArrayBuffer类   import scala.collection.mutable.ArrayBuffer

  • 语法:创建空的ArrayBuffer变长数组:

  •      语法结构:

  •             val/var a=ArrayBuffer[元素类型]()

  •             创建带有初始化元素的ArrayBuffer    val/var a=ArrayBuffer(元素1,元素2,元素3)

  •     添加,修改,删除元素

  •               使用+=添加元素    :添加

  •               使用-=删除元素     :删除

  •               使用++= 追加一个数组到变长数组

  • //创建变长数组
    //创建方式一
     val a20=ArrayBuffer[Int]()
        a20(0)=120
    
    //创建方式二
     val a21=ArrayBuffer(1,2,3,4,5,6,"aaa")
    
    
    //添加、修改,删除元素
    
     //添加
     a21+="bbb"
     //ArrayBuffer(1, 2, 3, 4, 5, 6, aaa, bbb)
    
     //删除
     a21-="aaa"
     println(a21)
     //ArrayBuffer(1, 2, 3, 4, 5, 6, bbb)
    
     //添加一个数组
     val a19=Array("1","2",3)
     println( a19(2))
     a21++=a19
     println(a21)
    //ArrayBuffer(1, 2, 3, 4, 5, 6, bbb, 1, 2, 3)
    
    
    //修改数组
        a21(5)="ss"
        println(a21)
    //ArrayBuffer(1, 2, 3, 4, 5, ss, bbb, 1, 2, 3)

    遍历数组:

  • //   遍历数组
        val a22 =Array(1,2,3,4,5,6,7,8,9)
        for (i<- a22){
          println(i)
        }
    
    //    使用for表达式基于索引下标遍历,并打印数组的元素
        for(i<- 0 to a22.length-1){
          println(a22(i))
        }
        
    //    使用until   (和to的区别在于 until不会包含 a.length最后一个值)
        for(i<- 0 until  a22.length)  println(a22(i))

    数组的常用算法:

  •    val a24=ArrayBuffer(1,2,3,4,5,6,7,8,9)
    //    求和
        println(a24.sum)
    //    求最大值
        println(a24.max)
    //    求最小值
        println(a24.min)
    //    排序
        a24+=15
        a24+=16
        a24+=8
        a24+=35
        println(a24.sorted)//升序排序
        println(a24.reverse)//降序排序

    引入集合的原因:数组的长度的不可变型,和元素数据类型的单一型,造就了各样的集合 

    元组:(值是不可以被改变的)

  • 定义元组,访问元组

  •  //    元组
        //    定义元组
        //            语法:使用括号定义元组
        val a25 = ("1", "2", "3", "4", "5")
        val a26 = "1" -> "2" -> "3"
    //    访问元组
        val a27 ="zhangsan"->"25"->"male"
        println(a27._1)
        println(a27._2)

列表

不可变列表:(数据结构类似于Scala中的数组)

 

//   不可变 列表   长度不可变
//    使用List(元素1,元素2,元素3,。。。)来创建一个不可变列表,语法格式
    val a28=List(1,2,3,4,5,6)
    val a29=Nil   //创建一个空列表
    val a30=1::2::3::4::Nil     //记得加Nil
    println(a28)
    println(a29)
    println(a30)

可变列表:(类似于Scala可变数组)

//    可变列表   需要导入ListBuffer
//    可变集合都是在  mutable中,而不可变集合是在 immutable中
//    可变列表的定义  :  使用ListBuffer[元素类型]()创建空的可变列表
//                 使用  ListBuffer(元素1,元素2,元素3)  创建可变列表
    //定义
    val a31=ListBuffer[Int]();
    val a32=ListBuffer(1,2,3,"aa","cc")


    //可变列表的操作
    a32(3)     //获取元素:使用括号访问(索引值)
    println(a32)
    a32+=3    //添加操作
    println(a32)
    a32-="aa"   //删除操作
    println(a32)
    a32(3)="bb"  //修改操作

    a31+=1      //添加一个列表
    a32++=a31
    println(a32)

    val a33=a32.toList
    println(a33)      //转换为List

    val a34=a32.toArray  //转换为Array
    println(a34)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值