Scala入门总结

119 阅读3分钟

1、异常

try{

var i = 1/0

} catch {

case e: ArithmeticException => e.printStackTrace()

case e: NumberFormatException => e.printStackTrace()

case _:Exception =>println("文件找不到") }

2函数的特性的补充

2.1 默认参数函数

说明:就是函数的参数列表已经复制就是默认参数,在调用函数的时候,此参数就可以不赋值。

object Demo8 {
  def main(args: Array[String]): Unit = {
    showAddress("zs", 15559577595L, "重庆")
    showAddress("ls", 1111111111L, "杭州")
  }

  def showAddress(name:String, phone:Long, province:String, country:String = "中国") = {
    println(s"name = ${name}, phone = ${phone}, province = ${province}, country = ${country}")
  }
}

2.2 带名的参数函数

就是直接在函数列表赋值参数

object Demo8 {
  def main(args: Array[String]): Unit = {
    // 调用函数的时候可以申明函数参数名调用
    showAddress(phone = 1111122222L, province = "苏州", name = "rock")
  }

  def showAddress(name:String, phone:Long, province:String, country:String = "中国") = {
    println(s"name = ${name}, phone = ${phone}, province = ${province}, country = ${country}")
  }
}

2.3 可变参数

package com.qf.bigata.scala

object Demo9 {
  def main(args: Array[String]): Unit = {
    //1. 和java一样
    println(add(1,2,3))
    println(add(1,2,3,4,5))

    //2. 和java不同
    val arr = Array(3,4,5)
    println(add(arr: _*)) // 在scala中不能直接传递数组
  }

  def add(arr: Int*) = {    //这里就是可变参数的表示
    var sum = 0
    for(a <- arr) sum += a
    sum
  }
}

我们可以回顾一下java的可变参数 三个点点!

public void print(String...names) {    
int count = names.length;    // 获取总个数        
System.out.println("本次参加考试的有"+count+"人,名单如下:");        
for(int i = 0;i < names.length;i++) {            
System.out.println(names[i]);      
} 
}

3、集合类型

3.1数组 ArrayBuffer : 理解为java的ArrayList

package com.qf.bigata.scala

import scala.collection.mutable.ArrayBuffer

object Demo11 {
  def main(args: Array[String]): Unit = {
    //1. 定义
    val buffer1 = new ArrayBuffer[Int]()
    val buffer2: ArrayBuffer[String] = ArrayBuffer[String]("lixi", "rock")

    //2. crud
    println(buffer2.length)
    println("增---------------------------->")
    buffer2.append("lee")
    println(buffer2.length)
    buffer2.append("rocklee", "sakura", "narudo")
    println(buffer2.length)
    println(buffer2.mkString(","))
    buffer2.insert(3, "2b")
    println(buffer2.mkString(","))

    println("查---------------------------->")
    println(buffer2(3))
    println(buffer2.size)

    println("改---------------------------->")
    buffer2(3) = "sb"
    println(buffer2.mkString(","))

    println("删---------------------------->")
    buffer2.remove(3) // 删除指定索引位置上的元素
    println(buffer2.mkString(","))
    buffer2.remove(3, 2)
    println(buffer2.mkString(","))

    //drop : 不是删除原数组,将原数组中的元素在内存中做副本删除之后生成新的副本
    println("drop---------------------------->")
    println(buffer2.mkString(","))
    val buffer3: ArrayBuffer[String] = buffer2.drop(2) // 按照左边顺序删除2个元素,生成新的副本
    println(buffer2.mkString(",")) // drop不会对原数组造成破坏
    println(s"buffer3: ${buffer3.mkString(",")}") // drop不会对原数组造成破坏
    val buffer4: ArrayBuffer[String] = buffer2.dropRight(2)
    println(s"buffer4: ${buffer4.mkString(",")}") // drop不会对原数组造成破坏
  }
}

不可变的:Array:理解为java的普通数组

package com.qf.bigata.scala

object Demo10 {
  def main(args: Array[String]): Unit = {
    //1. 定义数组
    //1.1 类似于java中的动态初始化数组
    val array1 = new Array[Int](5) // 自定义一个Int类型数组,并且数组长度是5,每个数组元素默认值为0
    array1.foreach(println)
    println("-" * 10)

    //1.2 类似于java中的静态初始化数组:伴生对象方式创建
    val array2 = Array(1,2,3,4) // 自定义一个Int类型数组,并且数组长度是4,数组元素分别为:1,2,3,4
    array2.foreach(println)
    println("-" * 10)

    //2. 获取到数组的元素:数组名(index)
    println(array2(2)) // java:array2[2]
    println("-" * 10)

    //3. 数组的遍历
    /*
     * //3.1 传统写法
     * for(element <- 数组名) {
     *  element : 数组中的每个元素
     * }
     *
     * //3.2 函数式编程的写法
     * 数组名.foreach(element => {
     *  element : 数组中的每个元素
     * })
     */

    //4. 数组的长度
    println(array2.length)
    println(array2.size)
    println("-" * 10)

    //5. 判断一个数组元素是否在一个数组中
    println(s"判断3是不是在array2的数组中:${array2.contains(-3)}")
    println("-" * 10)

    //6. 数组元素拼接 : mkString
    println(s"数组元素:${array2.mkString}") // 没有分隔符
    println(s"数组元素:${array2.mkString(",")}") // 逗号分隔符
    println(s"数组元素:${array2.mkString("[", ",", "]")}") // 逗号分隔符,前后加上符号

    //7. 所谓的不可变指的什么?
    //7.1 所谓的不可变并不是指值不可变
    //7.2 指的是数组长度不变
    array2(0) = 10
    println(s"数组元素:${array2.mkString("[", ",", "]")}") // 逗号分隔符,前后加上符号
    array2(4) = 11
    println(s"数组元素:${array2.mkString("[", ",", "]")}") // 逗号分隔符,前后加上符号
  }
}

通用操作

package com.qf.bigata.scala

import scala.collection.mutable
import scala.collection.mutable.ArrayBuffer

object Demo12 {
  def main(args: Array[String]): Unit = {
    val buffer: ArrayBuffer[Int] = ArrayBuffer[Int](1,2)
    val arr = Array(3,4,5)

    //contains : 判断一个元素是否在这个数组
    println(s"${buffer.contains(s"lixi")}, ${arr.contains(3)}")

    // 数组求和
    println(s"${arr.sum}, ${buffer.sum}")

    // 最大最小值
    println(s"${arr.max}, ${buffer.max}")
    println(s"${arr.min}, ${buffer.min}")

    // Array和ArrayBuffer相互转换
    val newBuffer: mutable.Buffer[Int] = arr.toBuffer // array -> arrayBuffer
    val newArray: Array[Int] = buffer.toArray // arrayBuffer -> array
  }
}