set实训内容
图书馆书籍管理系统相关的练习。内容要求:
1.创建一个可变 Set,用于存储图书馆中的书籍信息(假设书籍信息用字符串表示,如 “Java 编程思想”“Scala 实战” 等),初始化为包含几本你喜欢的书籍。
2.添加两本新的书籍到图书馆集合中,使用 += 操作符。
3.从图书馆集合中删除一本书,使用 -= 操作符。
4.检查某一本特定的书籍(如 “Python 从入门到实践”)是否在图书馆集合中,使用 contains 方法,并输出结果。
5.创建另一个可变 Set,表示另一个图书馆的书籍集合。
6.求出两个图书馆书籍集合的并集,使用 union 方法,并输出结果。
7.求出两个图书馆书籍集合的交集,使用 intersect 方法,并输出结果。
8.求出当前图书馆相对于另一个图书馆的差集,使用 diff 方法,并输出结果
代码:
// 1. 导入可变Set
import scala.collection.mutable
object set04 {
def main(args: Array[String]): Unit = {
// 1. 初始化第一个图书馆的可变Set(存储书籍名称)
val library1: mutable.Set[String] = mutable.Set(
"Java编程思想",
"Scala实战",
"数据结构与算法分析",
"深入理解Java虚拟机"
)
println("=== 初始图书馆1书籍 ===")
printSet(library1)
// 2. 使用 += 添加两本新书
library1 += "Python从入门到实践"
library1 += "机器学习实战"
println("\n=== 图书馆1添加新书后 ===")
printSet(library1)
// 3. 使用 -= 删除一本书
val bookToDelete = "Scala实战"
library1 -= bookToDelete
println(s"\n=== 图书馆1删除《$bookToDelete》后 ===")
printSet(library1)
// 4. 使用 contains 检查某本书是否存在
val bookToCheck = "Python从入门到实践"
val exists = library1.contains(bookToCheck)
println(s"\n=== 检查《$bookToCheck》是否在图书馆1中 ===")
println(if (exists) "存在" else "不存在")
// 5. 创建第二个图书馆的可变Set
val library2: mutable.Set[String] = mutable.Set(
"Python从入门到实践",
"机器学习实战",
"算法导论",
"统计学习方法"
)
println("\n=== 图书馆2书籍 ===")
printSet(library2)
// 6. 求两个图书馆的并集(所有书籍,去重)
val unionSet = library1.union(library2)
println("\n=== 两个图书馆的并集 ===")
printSet(unionSet)
// 7. 求两个图书馆的交集(共同拥有的书籍)
val intersectSet = library1.intersect(library2)
println("\n=== 两个图书馆的交集 ===")
printSet(intersectSet)
// 8. 求图书馆1相对于图书馆2的差集(图书馆1有但图书馆2没有的书籍)
val diffSet = library1.diff(library2)
println("\n=== 图书馆1相对于图书馆2的差集 ===")
printSet(diffSet)
}
// 辅助方法:格式化打印Set内容
def printSet(books: mutable.Set[String]): Unit = {
if (books.isEmpty) {
println("该图书馆暂无书籍")
} else {
println(books.mkString("{", ", ", "}"))
}
}
}
输出结果:
map实训内容
-
创建一个可变 Map,用于存储图书馆中的书籍信息(键为书籍编号,值为包含书籍名称、作者、库存数量的元组),初始化为包含几本你喜欢的书籍信息。
-
使用 += 操作符添加两本新的书籍到图书馆集合中。
-
根据书籍编号查询某一本特定的书籍信息,使用 get 方法,并输出结果。
-
修改某本书籍的库存数量(假设可以通过键找到对应的元组并修改其中的值,这里体现可变 Map 的特性)。
-
使用 -= 操作符从图书馆集合中删除一本书。
-
遍历图书馆书籍 Map,并打印出每本书的信息。
输出代码:
// 1. 导入可变Map
import scala.collection.mutable
object map03 {
def main(args: Array[String]): Unit = {
// 1. 初始化可变Map(键:书籍编号,值:(书名, 作者, 库存数量))
val library: mutable.Map[Int, (String, String, Int)] = mutable.Map(
101 -> ("算法导论", "Thomas H. Cormen", 5),
102 -> ("数据结构与算法分析", "Mark Allen Weiss", 3),
103 -> ("Python编程:从入门到实践", "Eric Matthes", 8)
)
println("=== 初始图书馆书籍信息 ===")
printBooks(library) // 调用遍历打印方法
// 2. 使用 += 添加两本新书
library += 104 -> ("深入理解Java虚拟机", "周志明", 4)
library += 105 -> ("机器学习实战", "Peter Harrington", 6)
println("\n=== 添加两本新书后 ===")
printBooks(library)
// 3. 根据书籍编号查询信息(使用get方法,返回Option类型)
val bookId = 103
val bookInfo = library.get(bookId)
println(s"\n=== 查询书籍编号 $bookId 的信息 ===")
bookInfo match {
case Some((name, author, stock)) =>
println(s"编号:$bookId,书名:$name,作者:$author,库存:$stock")
case None =>
println(s"未找到编号为 $bookId 的书籍")
}
// 4. 修改某本书的库存数量(可变Map支持直接更新值)
val updateId = 102
library.get(updateId) match {
case Some((name, author, stock)) =>
library(updateId) = (name, author, stock + 2) // 库存增加2本
println(s"\n=== 修改编号 $updateId 的库存后 ===")
println(s"编号:$updateId,书名:$name,作者:$author,原库存:$stock,新库存:${stock + 2}")
case None =>
println(s"未找到编号为 $updateId 的书籍,无法修改库存")
}
// 5. 使用 -= 删除一本书
val deleteId = 101
library -= deleteId
println(s"\n=== 删除编号 $deleteId 的书籍后 ===")
printBooks(library)
// 6. 遍历Map并打印所有书籍信息(定义独立方法复用)
println("\n=== 最终图书馆所有书籍信息 ===")
printBooks(library)
}
// 辅助方法:遍历打印Map中的书籍信息
def printBooks(library: mutable.Map[Int, (String, String, Int)]): Unit = {
if (library.isEmpty) {
println("图书馆暂无书籍")
} else {
library.foreach { case (id, (name, author, stock)) =>
println(f"编号:$id%3d,书名:$name%-20s,作者:$author%-15s,库存:$stock%2d本")
}
}
}
}
输出结果: