risc-v中文社区

 找回密码
 立即注册
查看: 978|回复: 2

[原创] risc-v开发基础 Scala val/var数组---(4)

  [复制链接]

347

主题

564

帖子

2237

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
2237
发表于 2021-8-2 09:34:26 | 显示全部楼层 |阅读模式
object ArrayTest {

  def main(args: Array[String]): Unit = {
    //scala数组
    //scala里面也和java一样,使用new实例化对象,实例化对象的过程,其实就是用值和类型使对象参数化。比如:val arr:Array[String] = new Array[String](3)
    var arr1 = List(1,2,3,4,5,6)
    var arr2 = Array(10,9,8,7,6)
    val arr3:Array[Int] = new Array[Int](3)
    var arr4:Array[Int] = new Array[Int](2)
    var arr5 = Array(30,31)
    arr3(0) = 11
    arr3(1) = 12
    arr3(2) = 13
    arr3(2) = 14
    for(a3 <- arr3) {
      println(a3)
    }
    arr1.foreach(println)
    arr2.foreach(println)

    arr4(0) = 20
    arr4(1) = 21
//    arr3 = arr2
//    arr3 = arr5
//    arr3 = arr4
    //上面这三句为什么不能赋值给arr3呢?先看下面代码,再对比来分析:
    arr2 = arr5
    arr2.foreach(println) //打印30 31
    arr2 = arr4
    arr2.foreach(println) //打印20 21
    //分析:因为arr3用的是val定义的,arr2用的是var定义的。在scala中,一个变量用val定义则表示这个变量的值是固定不变的,且
    //定义这个val变量的时候就需要赋值,如果不赋值则编译器会提示出错,比如:
//    val a:Int
    //这种方式定义val变量,则出错,只能是:
    val a:Int = 100
    //这样才是正确的定义val变量的语法
    //正因为val一旦定义之后就不允许再改变值,所以arr3再次被赋值的时候,始终都是不被允许的。而arr2因为是用var定义的,所以
    //定义之后可以在需要的时候修改变量值。
    //在上面的代码中,有的人可能会说,既然arr3是用val定义的,那为什么定义之后还可以arr3(0) = 11这样的赋值操作呢?
    //如果对java有所了解的人应该就会明白,此时的arr3(0)=11并不是修改arr3这个变量,而是修改这个引用类型变量所引用值的修改
    //arr3这个引用类型变量的值是不能修改的,定义它时用来表示一个实例化的Array[Int],那么它只能表示它,至于它的实际内容的
    //修改那是另一回事,只要arr3的值表示这个实例化的Array[Int]那么就是正确的。

    //arr3的完整定义形式表明:类型参数(包括方括号中的Int)是实例类型的组成部分,也就是说arr3的类型参数不是Array而是Array[Int]
  }
}

回复

使用道具 举报

347

主题

564

帖子

2237

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
2237
 楼主| 发表于 2021-8-2 13:14:24 | 显示全部楼层
    var arr6 = Array(40,41,42)
    var arr7 = Array(50,51)
//    arr6 += arr7 //错误
//    arr6 += 43 //错误
    val a9 = Array(43,44) ++: arr6  //在arr6前面添加一个Array组成一个新的Array,但arr6并不变
    a9.foreach(println)
    val arr6_1 = 0 +: arr6 // 在前面添加一个元素 arr6并不变
    arr6_1.foreach(println) //0 40 41 42
    arr6.foreach(println) //40 41 42
    arr6 ++= Array(43,44) //后面添加另一个Array,但arr6变了  40 41 42 43 44
    arr6.foreach(println)
    println(arr6.length)
//    val v = arr6.+("111") //这涉及到隐式转换方面的知识
//    v.foreach(println)

    import scala.collection.mutable.ArrayBuffer
    val arr8 = ArrayBuffer(60,61)
//    arr8.+=(62) //+=其实就是一个方法
    arr8 += 62  //arr8添加了一个新元素
    println(arr8.length)
    arr8.foreach(println)
    //添加一个元素用+=,添加Array或ArrayBuffer需要用++=
    arr8 ++= Array(70,71,72)
    arr8 ++= ArrayBuffer(80,81,82)
    arr8.foreach(println)
回复

使用道具 举报

347

主题

564

帖子

2237

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
2237
 楼主| 发表于 2021-8-2 14:08:06 | 显示全部楼层
  //除了上面代码中添加一个元素用 0 +: arr6  (在arr6之前添加0),还有一种就是添加另一个Array数组用 ++:
   val arr9 = arr6 ++: arr8 //arr6添加在arr8前面
    arr9.foreach(println)
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



Archiver|手机版|小黑屋|risc-v中文社区

GMT+8, 2024-4-27 15:15 , Processed in 0.017180 second(s), 17 queries .

risc-v中文社区论坛 官方网站

Copyright © 2018-2021, risc-v open source

快速回复 返回顶部 返回列表