scasla小白初步认识Array3.0

48 阅读2分钟

四、实训内容

任务背景:梦想清单管理。

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}]")
    )
  }
}

要点!

image.png