创建图书信息类

49 阅读2分钟
  1. 创建图书信息类,包含三个属性:书名,作者,价格

  2. 创建6本图书对象并添加到可变 List的尾部

  3. 创建1本图书对象并添加到可变 List的头部

  4. 创建1本图书对象并添加到可变 List的第3个位置

  5. 根据图书名称查询是否在列表中(通过遍历列表对比名称)

  6. 从列表中删除第4本书

  7. 对于图书按价格从高到低排序。

  8. 遍历图书列表,并打印每本书的详细信息

  9. 展示全部的总的金额

import scala.collection.mutable.ListBuffer

object w45 {

  // 1. 创建图书信息类
  case class Book(title: String, author: String, price: Double)

  def main(args: Array[String]): Unit = {
    // 创建一个可变的ListBuffer来存储图书
    val books = ListBuffer[Book]()

    // 2. 创建6本图书对象并添加到可变List的尾部
    books += Book("Scala编程", "Martin Odersky", 89.00)
    books += Book("Effective Java", "Joshua Bloch", 99.00)
    books += Book("深入理解Java虚拟机", "周志明", 119.00)
    books += Book("Spark快速大数据分析", "Holden Karau", 79.00)
    books += Book("Python数据科学手册", "Jake VanderPlas", 109.00)
    books += Book("算法导论", "Thomas Cormen", 159.00)

    println("添加6本书后的图书列表:")
    books.foreach(b => println(s"《${b.title}》 - ${b.author} - ¥${b.price}"))
    println()

    // 3. 创建1本图书对象并添加到可变List的头部
    val newBook = Book("编程珠玑", "Jon Bentley", 69.00)
    books.prepend(newBook)

    println("在头部添加《编程珠玑》后的图书列表:")
    books.foreach(b => println(s"《${b.title}》 - ${b.author} - ¥${b.price}"))
    println()

    // 4. 创建1本图书对象并添加到可变List的第3个位置
    // 注意:List索引从0开始,第3个位置就是索引2
    val anotherBook = Book("设计模式", "Erich Gamma", 129.00)
    if (books.length >= 2) {
      books.insert(2, anotherBook)
    } else {
      books += anotherBook
    }

    println("在第3个位置添加《设计模式》后的图书列表:")
    books.foreach(b => println(s"《${b.title}》 - ${b.author} - ¥${b.price}"))
    println()

    // 5. 根据图书名称查询是否在列表中
    val searchTitle = "Scala编程"
    var found = false
    for (book <- books) {
      if (book.title == searchTitle) {
        found = true
        println(s"找到图书《$searchTitle》")
      }
    }

    if (!found) {
      println(s"未找到图书《$searchTitle》")
    }
    println()

    // 也可以使用exists方法
    val exists = books.exists(_.title == searchTitle)
    println(s"使用exists方法查询《$searchTitle》:$exists")
    println()

    // 6. 从列表中删除第4本书(索引为3)
    if (books.length > 3) {
      val removedBook = books.remove(3)
      println(s"删除第4本书:《${removedBook.title}》")
    }

    println("删除第4本书后的图书列表:")
    books.foreach(b => println(s"《${b.title}》 - ${b.author} - ¥${b.price}"))
    println()

    // 7. 对于图书按价格从高到低排序
    val sortedBooks = books.sortBy(-_.price) // 或者使用 books.sortWith(_.price > _.price)

    println("按价格从高到低排序后的图书列表:")
    sortedBooks.foreach(b => println(s"《${b.title}》 - ${b.author} - ¥${b.price}"))
    println()

    // 8. 遍历图书列表,并打印每本书的详细信息
    println("当前图书列表详细信息:")
    println("=" * 50)
    for ((book, index) <- books.zipWithIndex) {
      println(s"${index + 1}. 书名:《${book.title}》")
      println(s"   作者:${book.author}")
      println(s"   价格:¥${"%.2f".format(book.price)}")
      println("-" * 30)
    }

    // 9. 展示全部的总的金额
    val totalAmount = books.map(_.price).sum
    println("=" * 50)
    println(f"图书总金额:¥$totalAmount%.2f")
    println(f"图书数量:${books.length}本")
    println(f"平均价格:¥${totalAmount/books.length}%.2f")

    // 另一种方式:使用foldLeft计算总金额
    val totalAmount2 = books.foldLeft(0.0)((sum, book) => sum + book.price)
    println(f"使用foldLeft计算的总金额:¥$totalAmount2%.2f")
  }
}