实训内容2

77 阅读2分钟
  1. 创建一个可变 Map,用于存储图书馆中的书籍信息(键为书籍编号,值为包含书籍名称、作者、库存数量的元组),初始化为包含几本你喜欢的书籍信息。

  2. 使用 += 操作符添加两本新的书籍到图书馆集合中。

  3. 根据书籍编号查询某一本特定的书籍信息,使用 get 方法,并输出结果。

  4. 修改某本书籍的库存数量(假设可以通过键找到对应的元组并修改其中的值,这里体现可变 Map 的特性)。

  5. 使用 -= 操作符从图书馆集合中删除一本书。

  6. 遍历图书馆书籍 Map,并打印出每本书的信息。

【代码如下:】

package map

/*
*
*1. 创建一个可变 Map,用于存储图书馆中的书籍信息(键为书籍编号,值为包含书籍名称、作者、库存数量的元组),初始化为包含几本你喜欢的书籍信息。
*2. 使用 += 操作符添加两本新的书籍到图书馆集合中。
*3. 根据书籍编号查询某一本特定的书籍信息,使用 get 方法,并输出结果。
*4. 修改某本书籍的库存数量(假设可以通过键找到对应的元组并修改其中的值,这里体现可变 Map 的特性)。
*5. 使用 -= 操作符从图书馆集合中删除一本书。
*6. 遍历图书馆书籍 Map,并打印出每本书的信息。
* */

import scala.collection.mutable.Map


object map03 {
  def main(args: Array[String]): Unit = {
    // 1. 创建可变Map:键=书籍编号(Int),值=元组(书籍名称, 作者, 库存数量)
    val bookMap = Map(
      1001 -> ("Java 编程思想", "Bruce Eckel", 5),
      1002 -> ("Scala 实战", "Nilanjan Raychaudhuri", 3),
      1003 -> ("数据结构与算法分析", "Mark Allen Weiss", 4),
      1004 -> ("计算机网络", "Andrew S. Tanenbaum", 2)
    )
    println("=== 初始图书馆书籍信息 ===")
    printBookInfo(bookMap) // 调用自定义方法打印书籍信息

    // 2. 使用 += 操作符添加两本新书(键为新编号,值为新元组)
    bookMap += 1005 -> ("Python 从入门到实践", "Eric Matthes", 6)
    bookMap += 1006 -> ("深入理解计算机系统", "Randal E. Bryant", 3)
    println("\n=== 添加两本新书后 ===")
    printBookInfo(bookMap)

    // 3. 根据书籍编号查询特定书籍(使用get方法,返回Option类型)
    val targetBookId = 1005
    val bookInfo = bookMap.get(targetBookId)
    println(s"\n=== 查询书籍编号 $targetBookId 的信息 ===")
    bookInfo match {
      case Some((name, author, stock)) =>
        println(s"书籍名称:$name,作者:$author,库存:$stock 本")
      case None => println(s"未找到编号为 $targetBookId 的书籍")
    }

    // 4. 修改某本书的库存数量(可变Map可直接通过键更新值)
    val updateBookId = 1002
    val newStock = 8
    // 先检查书籍是否存在,存在则更新库存(元组不可变,需重新赋值整个元组)
    bookMap.get(updateBookId) match {
      case Some((name, author, _)) => bookMap(updateBookId) = (name, author, newStock)
      case None => println(s"未找到编号 $updateBookId 的书籍,无法更新库存")
    }
    println(s"\n=== 将编号 $updateBookId 的书籍库存修改为 $newStock 本后 ===")
    printBookInfo(bookMap)

    // 5. 使用 -= 操作符根据书籍编号删除一本书
    val deleteBookId = 1003
    bookMap -= deleteBookId
    println(s"\n=== 删除编号 $deleteBookId 的书籍后 ===")
    printBookInfo(bookMap)

    // 6. 遍历Map并打印每本书信息(两种常用遍历方式,选一种即可)
    println("\n=== 最终遍历所有书籍信息(foreach方式) ===")
    bookMap.foreach { case (bookId, (name, author, stock)) =>
      println(f"编号:$bookId%4d | 书籍:$name%-18s | 作者:$author%-20s | 库存:$stock%2d 本")
    }
  }

  // 自定义辅助方法:统一格式化打印书籍信息(避免重复代码)
  def printBookInfo(bookMap: Map[Int, (String, String, Int)]): Unit = {
    bookMap.foreach { case (bookId, (name, author, stock)) =>
      // 格式化输出,使对齐更美观(%4d:占4位整数,%-18s:左对齐占18位字符串)
      println(f"编号:$bookId%4d | 书籍:$name%-18s | 作者:$author%-20s | 库存:$stock%2d 本")
    }
  }
}

【运行结果:】

image.png

image.png