目录
一、设计程序
使用ArrayList集合,编写一个模拟KTV点歌系统的程序。
- 要求:
- 输入0代表添加歌曲
- 输入1代表将所选歌曲置顶
- 输入2代表将所选歌曲提前一位
- 输入3代表删除所选音乐
- 输入4代表退出该系统
- 效果展示
- 思路:
- 歌曲类:歌曲名字
- 歌单类:包含歌曲类,用ArrayList容器装起来
- 增加歌曲
- 删除歌曲
- 移动歌曲
- 查找歌曲
- KTV类:包含歌单类
- 输入歌曲
- 输入操作数
- 操作系统
参考代码
歌曲类
java
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的方法判等
@Override
public 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);
}
@Override
public int hashCode() {
return Objects.hash(name);
}
@Override
public String toString() {
return "Song{" +
"name='" + name + '\'' +
'}';
}
}
歌单类
java
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;
}
@Override
public String toString() {
return "SongSheet{" +
"songList=" + songList +
'}';
}
}
KTV类
java
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);
}
}
测试类
java
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方法判断是否相等。
最后
如果感觉有收获的话,点个赞 👍🏻 吧。
❤️❤️❤️本人菜鸟修行期,如有错误,欢迎各位大佬评论批评指正!😄😄😄
💘💘💘如果觉得这篇文对你有帮助的话,也请给个点赞、收藏下吧,非常感谢!👍 👍 👍