object class37 {
def main(args: Array[String]): Unit = {
// 可变数组
val arr1 = scala.collection.mutable.ArrayBuffer(1,2,3);
// 可以直接添加元素
arr1 += 4
println(arr1)
// 不可变数组
val arr2 = Array(1,2,3)
// 不可变,不能直接添加元素
// arr2 += 4 //报错
println(arr2)
}
}
-
代码含义:
arr1是scala.collection.mutable.ArrayBuffer类型的可变数组;++=是 Scala 中可变集合的 “批量追加” 运算符,此处尝试将(5,6,7)中的元素批量添加到arr1中。
-
潜在问题:
- 语法错误:
(5,6,7)是元组,而++=要求右侧是 “可迭代对象”(如Array、List),正确写法应为arr1 ++= Array(5,6,7)或arr1 ++= Seq(5,6,7),直接写元组会导致类型不匹配错误。
- 语法错误:
-
修复方式:将代码改为以下任一写法:
scala
// 方式1:使用Array作为可迭代对象 arr1 ++= Array(5,6,7) // 方式2:使用Seq作为可迭代对象 arr1 ++= Seq(5,6,7) **```**object class38 { def main(args: Array[String]): Unit = { // 可变数组 val arr1 = scala.collection.mutable.ArrayBuffer(1,2,3) // 添加 // arr1 += 4 arr1 ++= Array(5,6,7)
// 删除 // arr1 -= 4 // 删除某个下标上的元素 // arr1.remove(3) // arr1.remove(6, 3) // 从指定位置开始删除;删除几个? // 修改 arr1(2) = 700 // 判断是否存在? println( arr1.contains(6)) // true println( arr1.contains(9)) // false println(arr1.sum) // 求和 arr1.foreach(ele=> println(ele))} }
object class39 { def main(args: Array[String]): Unit = { // 可变数组 val arr1 = scala.collection.mutable.ArrayBuffer(1,2,0,-1,20,3)
// 排序 // val arr2 = arr1.sortWith((a,b)=>a>b) // 切片:只取整个数组中的某个部分 slice val arr3 = arr1.slice(0, 3) // 过滤 // val arr4 = arr1.filter(x => x>0) // 按位置:检索某个元素的下标 val target = -2 val result = arr1.indexOf(target) // 如果没找到这个元素,就返回-1 println(s"${target}的下标是 ${result}") arr4.foreach(ele=> println(ele))} }
代码示例
object class39 {
// 定义样例类:封装梦想项的属性
case class DreamItem(content: String, isDone: Boolean, deadline: String, prior: Int)
def main(args: Array[String]): Unit = {
// 1. 初始化3个梦想项,补全content字段(填充具体目标)
val dream1 = DreamItem("完成Scala进阶学习", false, "2026-6-1", 1)
val dream2 = DreamItem("考取阿里云高级认证", false, "2026-12-11", 2)
val dream3 = DreamItem("完成个人项目开发", false, "2026-5-6", 3)
// 2. 存入可变数组
val dreamList = scala.collection.mutable.ArrayBuffer(dream1, dream2, dream3)
// 3. 标记第一个梦想为「已完成」
dreamList(0) = dreamList(0).copy(isDone = true)
// 4. 可选:调整第三个梦想的优先级(解开注释即可生效)
// dreamList(2) = dreamList(2).copy(prior = 0)
// 5. 按优先级升序排序(数字越小优先级越高)
val orderList = dreamList.sortBy(_.prior)
// 6. 切片:只取前2个高优先级的梦想
val newList = orderList.slice(0, 2)
// 7. 遍历打印结果(格式化输出)
newList.foreach(ele => {
println(s"内容: ${ele.content}")
println(s"状态: ${if (ele.isDone) "完成" else "未完成"}")
println(s"截止日期: ${ele.deadline}")
println(s"优先级: ${ele.prior}")
println("--------------------------")
})
println()
}
}