package Scala3 import scala.collection.mutable.ListBuffer //1 case class Book(var ID:String,var bookName: String, var author: String,var price: Double,var number:Int) { } object timu { def main(args: Array[String]): Unit = { //2 val BookList=ListBuffer[Book]() //3 BookList+=new Book("001","西游记","吴承恩",23.4,100) BookList+=new Book("002","星际远航:宇宙边缘的探索者"," 林羽",69,100) BookList+=new Book("003","时间裂缝:错乱时空的冒险","苏晓",78,28) println(BookList) //4.添加一本书 val book1=Book("002","星际远航:宇宙边缘的探索者"," 林羽",69,100) // //如果已经包含这本书,直接去修改数量 // for(b<-BookList){ println(b.ID) // if(b.ID==book1.ID){//同一本书 println(b) // b.number+=book1.number // println(b) // // } // } //查找,是否ID为book.ID的元素,找到就返回,没有找到,就返回None val rs=BookList.find(_.ID==book1.ID) println(rs) if(rs.isEmpty){ println("没有") BookList+=book1 }else{ println("有") val s=rs.get//拿出具体的数据 s.number+=book1.number//数量增加 } //5,根据名称去查询 var bookName="三体" val rs1=BookList.find(_.bookName==bookName) if(rs1.isEmpty){ println(s"《$bookName》不存在") }else{ println(s"《$bookName》存在") } //6.删除指定书名的书 bookName = "三体" val rs2 = BookList.find(_.bookName == bookName) if (rs2.isEmpty) { println(s"《$bookName》不存在,删除失败") } else { println(s"《$bookName》存在,删除成功") BookList-=rs2.get } //7.删除指定ID var id = "三体" val rs3 = BookList.find(_.ID == id) if (rs3.isEmpty) { println(s"id:$id 不存在,删除失败") } else { println(s"id:$id 存在,删除成功") BookList -= rs3.get } //8.价格顺序 val or=BookList.sortWith((a,b)=>a.price>b.price) println(or) //9.遍历 BookList.foreach(el=>{ println(s"书名:${el.bookName},作者:${el.author},价格:${el.price},数量:${el.number}") }) //10.计算全部金额 var sum:Double=0 BookList.foreach((w=>{ sum+=(w.number*w.price) })) println(s"总的金额是:${sum}") } }
相关文章
- 11-13Scala例题
- 11-13蓝桥杯c++算法学习【1】之枚举与模拟(卡片、回文日期、赢球票、既约分数:::非常典型的比刷例题!!!)- 对于一个8位数的整型日期,可以通过除法和取余运算来获取它的每一位数字。比如: 若整数date 的值为20050511,它从高到低的每一数位上的数可以通过下列方法得到。 • data / 10000000 = 2; • data / 1000000 % 10 = 0; • data / 100000 % 10 = 0; • data / 10000 % 10 = 5; • data / 1000 % 10 = 0; • data / 100 % 10 = 5; • data / 10 % 10 = 1; • data % 10 = 1。 对于本题,若用a[1]、a[2]、a[3]、a[4]、a[5]、a[6]、a[7]、a[8] 分别存储每一位,则一个 回文日期须满足: 一个ABABBABA 型回文日期须满足以下条件。 a[1] = a[3] = a[6] = a[8];a[2] = a[4] = a[5] = a[7]. 对于一个日期字符串,可以直接通过下标来获取它的每一位数字。例如,string date = “20050511”,它从高到低的每一位分别可以通过data[0],data[1],...,data[7] 得到。判断回文日期及ABABBABA型回文日期的方式和上述方法类似。 不难看出,字符串获取日期的每一位数字是要比整型简单的,所以在判断回文日期及 ABABBABA 型回文日期时可以将整型转换为字符串来操作,如参考代码所示。 #include <bits/stdc++.h> using namespace std; int date = 20050511; string s = to_string(date); // 将整型转换为字符串, s = "20050511" // 判断回文日期 bool check1(int date) { string s = to_string(date); if (s[0] == s[7] && s[1] == s[6] && s[2] == s[5] && s[3] == s[4]) return true; return false; } // 判断 ABABBABA 型回文日期 bool check2(int date) { string s = to_string(date); if (s[0] == s[2] && s[0] == s[5] && s[0] == s[7] && s[1] == s[3] && s[1] == s[4] && s[1] == s[6]) return true; return false; } 2. 如何枚举日期 对于一个整型日期,可以用最简单的方式枚举,即令该日期不断+1,直到出现满足ABAB BABA 型的回文日期。 但这样存在一个问题:会枚举出许多不合法的日期(如20209999)。为此,我们需要对 日期进行合法性判断:设y,m,d分别表示年、月、日,month[i]表示第i个月的天数,那么当m12或dmonth[m]时日期不合法,反之日期合法,如参考代码所示。 #include <iostream> #include <string> using namespace std; int month[13] = {-1, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}; bool check(int date) { string s = to_string(date); //stoi->将字符串转为整型 int y = stoi(s.substr(0, 4)), m = stoi(s.substr(4, 2)), d = stoi(s.substr(6, 2)); if (y % 400 == 0 || (y % 4 == 0 && y % 100 != 0)) month[2] = 29; else month[2] = 28; if (m < 1 || m > 12 || d < 1 || d > month[m]) return false; return true; } int main { int date = 20050511; for (int i = date + 1;; i++) { if (!check(i)) continue; // 找到下一个有效日期后,可以在这里进行进一步处理 // 例如,检查是否是回文日期或 ABABBABA 型回文日期 cout << "Next valid date: " << i << endl; break; } return 0; } 不过这样的枚举量是相当大的,要在比赛中完成本题要求的所有测试数据不太现实。 那么,还有什么枚举方法呢? 可以直接枚举合法日期。枚举合法日期只需模拟日期的变化规律即可,对应参考代码如 下所示。 #include <iostream> using namespace std; int month[13] = {-1, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}; int main { int date = 20050511; int y = date / 10000, m = date / 100 % 100, d = date % 100; for (int i = y;; i++) { if (i % 400 == 0 || (i % 100 != 0 && i % 4 == 0)) month[2] = 29; // 闰年2月有29天 else month[2] = 28; int j = (i == y) ? m : 1; // 如果是i = y,则月份从m开始枚举,否则从1开始枚举 for (; j <= 12; j++) { int k = (i == y && j == m) ? d : 1; // 如果i = y并且j = m,则日从d开始枚举,否则从1开始枚举 for (; k <= month[j]; k++) { int new_date = i * 10000 + j * 100 + k; // 在这里可以进行进一步处理,例如检查是否是回文日期或ABABBABA型回文日期 cout << "Next valid date: " << new_date << endl; return 0; // 找到第一个有效日期后退出程序 } } } return 0; } 综上 :
- 11-13Scala的包及其导入
- 11-13Scala的函数的闭包
- 11-13DDA画线算法例题
- 11-13系统架构设计师-下午案例题(2018年下半年)
- 11-13单元模块测试例题
- 11-13Scala学习笔记19: 隐式转换和隐式参数
- 11-13建造者模式例题
- 11-13【数据结构与算法 经典例题】判断二叉树是否对称