四、实训内容
任务背景:梦想清单管理。
1. 使用case class 定义DreamItem类。它的属性有:内容,是否完成,截止日期,优先级。
2. 定义可变Array来保存DreamItem。
3. 添加3个梦想
4. 将第2个梦想设置为已完成。
5. 调高第3个梦想的优先级
6. 根据优先级进行从高到低排序
7. 把优先级排名前5的梦想保存到一个新的列表中
8. 循环输出梦想列表
package array
/***
* 任务背景:梦想清单管理。
*
* 1.使用case class 定义DreamItem类。它的属性有:内容,是否完成,截止日期,优先级。
* 2.定义可变Array来保存DreamItem。
* 3.添加3个梦想
* 4.将第2个梦想设置为已完成。
* 5.调高第3个梦想的优先级
* 6.根据优先级进行从高到低排序
* 7.把优先级排名前5的梦想保存到一个新的列表中
* 8.循环输出梦想列表
*/
object array03 {
// 1. 定义DreamItem(用var让属性可变,方便直接修改)
case class DreamItem(content: String, var isDone: Boolean, // var修饰,支持直接修改
deadline: String,
var prior: Int // var修饰,支持直接修改
)
def main(args: Array[String]): Unit = {
// 2. 定义可变ArrayBuffer保存梦想
val dreamList = scala.collection.mutable.ArrayBuffer(
// 3. 添加3个梦想
DreamItem("学习Scala", false, "2026-09-30", 1),
DreamItem("挣第一桶金", false, "2026-12-05", 2),
DreamItem("梦想的旅途,我背着行囊", false, "2026-07-10", 3)
)
println("=== 初始梦想列表 ===")
printDreams(dreamList)
// 4. 将第2个梦想设置为已完成(索引从0开始,第2个对应索引1)
dreamList(1).isDone = true
println("\n=== 第2个梦想标记为已完成后 ===")
printDreams(dreamList)
// 5. 调高第3个梦想的优先级(第3个对应索引2,这里从3调高到5)
dreamList(2).prior = 5
println("\n=== 第3个梦想优先级调高后 ===")
printDreams(dreamList)
// 6. 根据优先级从高到低排序
val sortedDreams = dreamList.sortBy(_.prior).reverse
println("\n=== 按优先级从高到低排序后 ===")
printDreams(sortedDreams)
// 7. 保存优先级前5的梦想(当前3个,全部保留)
val top5Dreams = sortedDreams.take(5)
println("\n=== 优先级前5的梦想列表 ===")
printDreams(top5Dreams)
// 8. 循环输出最终列表
println("\n=== 最终梦想列表详情 ===")
top5Dreams.foreach { dream =>
println(s"内容:${dream.content}")
println(s"状态:${if (dream.isDone) "已完成" else "未完成"}")
println(s"截止日:${dream.deadline}")
println(s"优先级:${dream.prior}")
println("-" * 30)
}
}
// 辅助方法:打印梦想列表
def printDreams(list: scala.collection.mutable.ArrayBuffer[DreamItem]): Unit = {
list.foreach(ele =>
println(s"[内容:${ele.content} | 状态:${if (ele.isDone) "已完成" else "未完成"} | 截止日:${ele.deadline} | 优先级:${ele.prior}]")
)
}
}