访问数组元素

52 阅读1分钟
object class3 {
  def main(args: Array[String]): Unit = {
    // Array(1,2,3)
    // val arr = Array.range(1,100)
    // arr.foreach(println) // 1-99
    // val arr1 = Array.range(1,100, 3) // 3 步长
    // arr1.foreach(println)// 1-99

    val arr1 = Array(1,2,3)
    // 访问数组元素
    println(arr1(0)) // 第一个元素
    println(arr1(2)) // 第三个元素
    println(arr1(20)) // 报错:数组越界!第21个元素:java.lang.ArrayIndexOutOfBoundsException:
  }
}

image.png

1. 确认数组有效下标范围

先明确数组的长度(数组名.length),有效下标是 0 ~ 数组长度-1。比如你的代码中arr1 = Array(1,2,3),长度是 3,有效下标是0、1、2,所以不能访问20

2. 访问前检查下标合法性

在使用下标前,先判断它是否在有效范围内:

scala

val arr1 = Array(1,2,3)
val index = 20
// 检查下标是否在 0 ~ arr1.length-1 之间
if (index >= 0 && index < arr1.length) {
  println(arr1(index))
} else {
  println(s&#34;下标${index}越界!数组长度为${arr1.length},有效下标是0~${arr1.length-1}&#34;)
}

3. 用安全的访问方法(Scala 特有的lift

Scala 的数组可以通过lift方法将下标访问转为Option类型(存在则返回Some(值),不存在则返回None),避免直接抛出异常:

scala

val arr1 = Array(1,2,3)
// 安全访问下标20,返回None
val result = arr1.lift(20)
// 处理结果
result match {
  case Some(value) => println(value)
  case None => println(&#34;下标越界,无法访问&#34;)
}

4. 循环遍历数组时用合法下标

如果是循环中访问,用数组的indices(返回有效下标范围)或直接遍历元素,避免手动写下标:

scala

val arr1 = Array(1,2,3)
// 遍历有效下标
for (i