加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

Scala学习之循环和数组的运用

发布时间:2020-12-16 09:46:41 所属栏目:安全 来源:网络整理
导读:package com.lyzx.scalaLearn import scala.collection.mutable.ArrayBuffer class Day0302 { // 在高级 for 循环中可以定义任意多个变量 def f1 (): Unit ={ for (i - 1 to 3 ; from = 4 -i ; j - 1 to from) println ( "i=" +i+ ",j=" +j) val s = "abcd"
package com.lyzx.scalaLearn

import scala.collection.mutable.ArrayBuffer

class Day0302 {


  //在高级for循环中可以定义任意多个变量
  def f1(): Unit ={
    for(i <- 1 to 3;from =4-i ;j <- 1 to from)
      println("i="+i+",j="+j)

    val s = "abcd"
    val s2 = (for(c <- s) yield (c+1).toChar).toString
    println("s2:"+s2)
  }

  //如果for循环中以yield开头则会返回一个Vector集合这个叫for的推导式
  def f2(): Unit ={
    val arr = Array("A","B","C")
    val vv = for(v <- arr) yield v.toLowerCase
    for(v <- vv)  println("-"+v)
  }

  //带有默认值的方法
  def f3(middle:String,left:String="[",right:String="]"): String ={
    left+middle+right
  }

  def sum(args:Int*):Int ={
    println(">>>"+args.getClass.getName)
    var sum:Int = 0
    for(v <- args) sum += v
    sum
  }

  /**  * 没有返回值/或者说返回值类型是Unit的函数叫过程  * 我们使用过程的目的是为了它的副作用  */  def f4 (): Unit ={
    //可以使用lazy来申明一个变量
    lazy val x = scala.io.Source.fromFile("scalaQ")

  }

  //scala的异常处理机制
  def f5(): Unit ={
    try{
      val x = 1/0
    }catch {
      case ex:ArithmeticException =>ex.printStackTrace()
      case _ :IndexOutOfBoundsException=>println("数组下标")
    }
  }

  //ArrayBuffer是长度可变的数组类似于java中的ArrayList
  def f6(): Unit ={
    val ab = new ArrayBuffer[Int]()

    //在后面添加一个元素
    ab += 1

    //在后面添加多个元素
    ab += (2,4,6,8)

    //把一个数组中的元素(引用)添加到其后面,可以使用++=追加任何集合
    //其实在缓冲数组后面添加或者移除元素是一个高效的操作
    ab ++= Array(99,88)

    ab ++= List(100)

    //剪切后面的3个元素
    ab trimEnd(3)

    //在索引为2的位置插入999这个元素,当然后面元素都要平移
    ab.insert(2,999)

    //可以插入多个元素
    ab.insert(2,111,222,333)

    //删除索引为2的元素
    ab.remove(2)

    //从索引为2的位置开始,向后删除2    ab.remove(2,2)
    for(v <- ab){
      println(v)
    }
  }


  //对于数组和缓冲数组的遍历(其方法时一样的)
  def f7(): Unit ={
    val ab = new ArrayBuffer[Int]()
    ab ++= Array(10,9,8,7,5)

    //通过下标访问每一个索引
    for(i <- 1 until  ab.length){
      println(ab(i))
    }

    //类似于增强的for循环
    for(v <- ab){
      println(">>"+v)
    }
  }


  // to的是使用
  def f8(): Unit ={
    for(i <- 1 to (10,2)){
      println(i)
    }

    for(v <- (1 to 10).reverse){
      print(v+"-")
    }
  }

  //(缓冲)数组做转换
  //通过对yield 对数组做转换 数组转换后还是数组  缓冲数组准换后得到的是缓冲数组
  def f9(): Unit ={
    val arr = Array(1,2,3,5,10)
    //可以通过守护过滤部分数据
    val vv = for(v <- arr if(v % 3 == 0)) yield v+1
    for(v <- vv){
      print(v+" ")
    }

    println()
    for(v <- arr if(v % 2 == 0)){
      print(v+" = ")
    }
  }

  //上述功能的另一种做法,只是会新产生一个数组,原数组没有影响
  def f10(): Unit = {
    val arr = Array(1,10)
    val a2 = arr.filter(_ % 3 == 0)
                .map(_ +1)
    for(v <- a2){
      println(v)
    }
  }
}

object Day0302{
  def main (args:Array[String]): Unit = {
    val t = new Day0302
//    t.f1()
//    t.f2()
//    println(t.f3("123","<"))

//    val sum = t.sum(1,2,3,4,5,6,7,8,9,10)
//    println("sum="+sum)
//
//    //可以通过在元组后面追加:_*
//    println(t.sum(1 to 5:_*))
//    t.f5
//    t.f6
//  t.f7()
//    t.f8()
//    t.f9()
t.f10()

  }

}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读