每日一练:利用多态思想和ArrayList集合,编写一个模拟KTV点歌系统的程序。【多态思想和ArrayList集合的综合应用】

目录

  • 一、设计程序
        • 使用ArrayList集合,编写一个模拟KTV点歌系统的程序。
        • 参考代码
          • 歌曲类
          • 歌单类
          • KTV类
          • 测试类
          • 运行效果
        • 总结
    • 最后

一、设计程序

使用ArrayList集合,编写一个模拟KTV点歌系统的程序。
  • 要求:
    • 输入0代表添加歌曲
    • 输入1代表将所选歌曲置顶
    • 输入2代表将所选歌曲提前一位
    • 输入3代表删除所选音乐
    • 输入4代表退出该系统
  • 效果展示
    在这里插入图片描述

  • 思路:
    • 歌曲类:歌曲名字
    • 歌单类:包含歌曲类,用ArrayList容器装起来
      • 增加歌曲
      • 删除歌曲
      • 移动歌曲
      • 查找歌曲
    • KTV类:包含歌单类
      • 输入歌曲
      • 输入操作数
      • 操作系统

参考代码
歌曲类
package day604.homework;import java.util.Objects;public class Song {private String name;// 歌曲名字public Song(String name) {this.name = name;}public String getName() {return name;}public void setName(String name) {this.name = name;}//重写equals 以便于集合ArrayList中contains方法判断歌单中是否包含输入的歌曲//因为contains底层是通过遍历ArrayList,再调用元素的equal的方法判等@Overridepublic boolean equals(Object o) {if (this == o) return true;if (o == null || getClass() != o.getClass()) return false;Song song = (Song) o;return Objects.equals(name, song.name);}@Overridepublic int hashCode() {return Objects.hash(name);}@Overridepublic String toString() {return "Song{" +"name='" + name + '\'' +'}';}
}
歌单类
package day604.homework;import java.util.ArrayList;public class SongSheet {private final int SONG_SIZE = 4; // 默认歌单容量private  final ArrayList<Song> DEFAULTAUL_SONG_LIST = new ArrayList<>(SONG_SIZE);// 默认歌单private ArrayList<Song> songList;// 实际操作的歌单,我自己模仿ArrayList源码写的,哈哈public SongSheet() {DEFAULTAUL_SONG_LIST.add(new Song("写不完的温柔"));DEFAULTAUL_SONG_LIST.add(new Song("泡沫"));DEFAULTAUL_SONG_LIST.add(new Song("雨后人去楼也空"));DEFAULTAUL_SONG_LIST.add(new Song("绿色"));songList = DEFAULTAUL_SONG_LIST; //无参构造,将实际操作的歌单引用默认歌单}public SongSheet(ArrayList<Song> songArrayList) {this.songList = songArrayList;}public ArrayList<Song> getSongArrayList() {return songList;}public void setSongArrayList(ArrayList<Song> songArrayList) {this.songList = songArrayList;}// 检查歌曲是否正确,或歌单是否包含,以便于去重public boolean songCheek(Song song){if (song == null || songList.contains(song)) {return false;}return true;}// 添加歌曲public int addSong(Song song){if (!songCheek(song)){ //判断是否包含添加歌曲,包含直接返回,不用再次添加System.out.println("输入歌曲有误或歌曲重复");return -1;}songList.add(song);return 1;}//删除歌曲public int removeSong(Song song){if(songCheek(song)){ //判断是否包含删除歌曲,不包含直接返回return -1;}songList.remove(song);return 1;}public int songTopping(Song song){if(songCheek(song)){//判断是否包含置顶歌曲,不包含直接返回return -1;}removeSong(song);songList.add(0,song);return 1;}public int songMove_forward_one(Song song){int songIndex = songList.indexOf(song);if (songIndex <= 0 || songCheek(song)) {//判断是否包含移动歌曲或歌曲是否在首位,不包含直接返回,在首位,不能在移动,直接返回return -1;}removeSong(song);songList.add(songIndex-1,song);return 1;}@Overridepublic String toString() {return "SongSheet{" +"songList=" + songList +'}';}
}
KTV类
package day604.homework;import java.util.Scanner;public class KTV {private SongSheet songSheet;// 歌单public KTV() {songSheet = new SongSheet();}public KTV(SongSheet songSheet) {this.songSheet = songSheet;}public SongSheet getSongSheet() {return songSheet;}public void setSongSheet(SongSheet songSheet) {this.songSheet = songSheet;}//打开系统public  void openKTV(){System.out.println("---------欢迎来到点歌系统----------");System.out.println("0.添加歌曲至列表");System.out.println("1.将歌曲置顶");System.out.println("2.将歌曲前移一位");System.out.println("3.删除歌曲");System.out.println("4.退出");System.out.println("初始化歌单列表:"+songSheet.toString());int i = 0;while(i >= 0 && i < 4){// 控制系统运行System.out.println("请输入操作数:");i = getInputOperand(); // 获得操作数if (i >=0 && i < 4) {System.out.println("请输入歌曲名字:");controlSongSheet(i,getInputSong());//调用控制歌单方法}System.out.println("当前歌单列表:"+songSheet.toString());// 打印}System.out.println("退出成功");}//控制歌单方法public void controlSongSheet(int key,Song song){switch(key){case 0:songSheet.addSong(song);break;case 1:songSheet.songTopping(song);break;case 2:songSheet.songMove_forward_one(song);break;case 3:songSheet.removeSong(song);break;default:System.out.println("输入错误");}}//获得操作数public int getInputOperand(){Scanner scanner = new Scanner(System.in);return scanner.nextInt();}// 获得歌曲public Song getInputSong(){Scanner scanner = new Scanner(System.in);String songName = scanner.nextLine();return new Song(songName);}}
测试类
package day604.homework;public class Test {public static void main(String[] args) {KTV ktv = new KTV();ktv.openKTV();// 打开系统}
}
运行效果

在这里插入图片描述


总结
  • 使用到的ArrayList的方法:
    - boolean add(E e) —>将指定的元素添加到此列表的尾部。
    • void add(int index, E element) —>将指定的元素插入此列表中的指定位置。
    • int remove(E e)—>将指定的元素移除。
    • int indexOf(E e)—>返回指定元素下标。
    • int size()—>返回列表元素数量’
    • boolean contains(E e)—>判断是否包含该元素。
  • 注意:使用contains,记得要重写元素的equals方法,因为contains底层是通过遍历集合,一个一个的通过equals方法判断是否相等。
    在这里插入图片描述

最后

如果感觉有收获的话,点个赞 👍🏻 吧。
❤️❤️❤️本人菜鸟修行期,如有错误,欢迎各位大佬评论批评指正!😄😄😄

💘💘💘如果觉得这篇文对你有帮助的话,也请给个点赞、收藏下吧,非常感谢!👍 👍 👍在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/22514.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

云原生环境下GPU算力调度发展分析

云原生环境下GPU算力调度深度分析 概述&#xff1a; 云原生时代&#xff0c;GPU算力调度与管理备受瞩目&#xff0c;成为企业和云服务提供商关注的焦点&#xff0c;助力AI、深度学习、高性能计算等领域&#xff0c;满足对GPU资源的迫切需求。 容器化与编排&#xff1a; Kube…

突破开源天花板!最强文本转语音工具ChatTTS:对话式高可控的语音合成模型

ChatTTS 一夜爆火&#xff0c; 极速出圈&#xff0c; 3 天就斩获 9k 的 Star 量&#xff0c; 截止 2024.06.04&#xff0c; 已经 19.3k 的 star&#xff0c; 极速接近 GPT-soVITs 当天的 26.2k 的 star 数。 什么是ChatTTS&#xff1f; TTS全称&#xff1a;Text To Speech&am…

数字生命计划1.0

一. 背景 即使人们强调思维与肉体是两大构成个体的先决条件&#xff0c;但科学界始终没有放弃探索摆脱肉体的介质&#xff0c;从而让思维上载的研究。 这就是数字生命计划的初衷。所谓数字生命&#xff0c;就是将人类的意识思维抽离&#xff0c;上传至云端或智能终端&#xf…

eMMC的封装类型及特点有哪些?

eMMC&#xff08;Embedded MultiMediaCard&#xff09;是一种高度集成的嵌入式存储解决方案&#xff0c;广泛应用于智能手机、平板电脑、笔记本电脑、消费电子产品和物联网设备等领域。eMMC的封装形式对其性能、应用和设备设计有着重要的影响。目前&#xff0c;eMMC主要有两种封…

航空航天技术翻译要求

航空航天技术是一项国际化产业&#xff0c;航空技术更新迅速涉及的专业知识较为广泛。在航空领域&#xff0c;每一个术语都有着特定的含义和用法&#xff0c;稍有差池就可能导致翻译出现严重的后果&#xff0c;因此&#xff0c;航空航天翻译扮演者至关重要的角色。 专业航空航天…

【ARM Cache 与 MMU 系列文章 7.6 -- ARMv8 MMU 相关寄存器介绍】

文章目录 MMU 转换控制寄存器 TCR_ELxTCR_ELx 概览TCR_ELx 寄存器字段详解TCR 使用示例Normal MemoryCacheableShareability MMU 内存属性寄存器 MAIR_ELx寄存器结构内存属性字段使用实例 MMU 地址翻译表基址寄存器 TTBR0/1_ELxTTBR0_ELx 寄存器概述寄存器结构功能和用途编程示…

idea Pycharm Webstorm 2024年 最新版 永久使用2099年教程 附激活码亲测可用

idea Pycharm Webstorm 2024年 最新版 永久使用2099年教程 附激活码亲测可用 链接&#xff1a; 下载 IntelliJ IDEA – 领先的 Java 和 Kotlin IDE (jetbrains.com)&#xff08;这是官网的&#xff09; 下载 安装 1.双击idea的安装包&#xff0c;点击next 选择创建桌面快捷…

深入剖析时序Prophet模型:工作原理与源码解析|得物技术

随着得物业务的快速发展&#xff0c;积累了大量的时序数据&#xff0c;这些数据对精细化运营&#xff0c;提升效率、降低成本有着重要作用。在得物的时序数据挖掘场景中&#xff0c;时序预测Prophet模型使用频繁&#xff0c;本文对Prophet的原理和源码进行深入分析&#xff0c;…

边缘计算网关:企业数字化转型的重要支撑-天拓四方

在数字化浪潮席卷全球的今天&#xff0c;企业对于数据处理和传输的需求日益增强。然而&#xff0c;传统的数据处理模式往往依赖于中心化的数据中心&#xff0c;这种方式在处理大量数据时存在延迟高、成本高、安全性差等问题。数据量的激增和实时性要求的提高&#xff0c;使得传…

让AI给你写代码(9.3):一点改进,支持扩展本地知识库

改进目标&#xff0c;当输入提示问题后&#xff0c;能匹配到本地知识库的需求&#xff0c;然后AI按匹配到的需求给出代码并进行自动测试&#xff1b; 如果无法匹配到本地需求&#xff0c;可以直接输入生成逻辑&#xff0c;再由AI生成&#xff0c;然后支持用户把新需求插入本地库…

XML概述、格式、解析-WEB

XML概述 XML&#xff08;Extensible Markup Language&#xff09; 可扩展的标识语言 数据传输的一种格式 树形结构&#xff08;节点&#xff09; 优点 解析的更快 : 使用标签语言&#xff0c;能够很快定位 占用空间小 : 纯文本格式 可读性强 : 带有名字的标签我们都很喜欢 跨平…

MathType7.9最新免费注册机注册码激活码分享

MathType作为一个强大的数学公式编辑器&#xff0c;广泛用于教育、科研和出版领域。它支持多种文档格式和数学符号&#xff0c;是撰写科技文档不可或缺的工具。对于一些个人用户和小型机构来说&#xff0c;正版软件的高昂价格可能是一个负担。因此&#xff0c;寻找合法途径下的…

Windows 10 以上版本用久了应该重新安装还是重置呢?

今天明月工作电脑的 Windows 10 因为安装过太多软件和使用太久了的缘故造成网络总是很不稳定&#xff0c;总是出现一些莫名其妙的问题&#xff0c;实在是懒得去查找和排错了&#xff0c;就想着干脆推到重来吧&#xff0c;这样性能表现还会提升不少&#xff0c;并且可以一次性的…

向量化:机器学习中的效率加速器与数据桥梁

在机器学习领域的广袤天地中&#xff0c;向量化技术以其独特的魅力&#xff0c;为数据处理和模型训练注入了强大的动力。本文将深入探讨向量化在机器学习领域中的体现&#xff0c;剖析其如何助力模型实现高效的数据处理和精确的结果预测&#xff0c;并通过丰富的案例和详尽的数…

容器中运行ping提示bash: ping: command not found【笔记】

容器中运行ping提示bash: ping: command not found 原因是容器中没有安装ping命令 在容器中安装ping命令&#xff0c;可以使用以下命令&#xff1a; 对于基于Debian/Ubuntu的容器&#xff0c;使用以下命令&#xff1a; apt-get update apt-get install -y iputils-ping对于基…

Nginx在线部署和离线部署方式

Nginx 有两种安装方式: 1)在线安装的方式 1.添加Nginx 到yum源 sudo rpm -Uvh <http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm> 2.安装Nginx,直接使用yum方式 yum install -y nginx 3.启动nginx,刚安装的nginx不…

一图读懂:Flink CDC如何流式写入Paimon?

一图读懂&#xff1a;Flink CDC如何流式写入Paimon&#xff1f; 以Mysql CDC至Paimon为例 整体架构 MySQL CDC SourceSnapshotReader读取快照全量数据&#xff0c;BinlogReader读取增量数据。 paimon sink 实现桶级别的写入&#xff0c;compactManager实现异步compaction co…

第六讲:AD、DA的工作原理及实现、运放电路

DA 数模转换器 (DAC) 数模转换器&#xff08;Digital-to-Analog Converter&#xff0c;简称DAC&#xff09;是一种将数字信号转换为模拟信号的电子装置。DAC在各种电子设备中广泛应用&#xff0c;如音频设备、通信系统、测量设备和控制系统中。以下是DAC的主要概念和应用。…

Windows下从源码编译ONNX Runtime

前言&#xff1a;作者在做深度学习模型部署过程中&#xff0c;遇到一些算子问题&#xff0c;需要在ONNX Runtime平台上实现一些自定义算子&#xff0c;在此过程中&#xff0c;onnxruntime官方给的现成的库缺少一些必要文件&#xff0c;遂需要下载onnxruntime源码并进行编译。 …

调用万维易源API生成AI艺术二维码

目录 1. 作者介绍2. 艺术二维码2.1 艺术二维码的作用2.2 艺术二维码的应用场景2.3调用万维易源API生成AI艺术二维码 3. 实验过程3.1算法流程3.2完整代码3.3测试结果 1. 作者介绍 韩阳&#xff0c;男&#xff0c;西安工程大学电子信息学院&#xff0c;2023级研究生 研究方向&am…