【目标】
- 学会分析“模拟KTV点歌系统”程序设计的实现思路。
- 根据思路独立完成“模拟KTV点歌系统”程序设计的源代码编写、编译及运行。
- 掌握ArrayList集合和LinkedList集合中方法的使用。
【思路】
- 为了指引用户操作,首先要将各个指令所表示的含义打印到控制台。
- 程序中需要创建一个集合作为歌曲列表,并向其添加一部分歌曲。
- 由于控制台需要实时等待用户输入命令,所以可以使用while(true)来使程序一直处于等待用户输入指令的状态。
- 可以通过Scanner类的nextInt()方法来接受控制台的信息。
- 可以使用switch语句,根据控制台传入的指令,判断应该执行的操作。
- 通过LinkedList集合或ArrayList集合定义的方法操作歌曲列表。
使用LinkedList集合模拟点歌系统的实现代码。
文件KTVByLinkedList.java
import java.util.LinkedList;
import java.util.Scanner;
public class KTVByLinkedList{
public static void main(String[] args) {
System.out.println("-------------欢迎来到点歌系统------------");
System.out.println("0.添加歌曲至列表");
System.out.println("1.将歌曲置顶");
System.out.println("2.将歌曲前移一位");
System.out.println("3.退出");
LinkedList lineUpList = new LinkedList();// 创建歌曲列表
addMusicList(lineUpList);// 添加一部分歌曲至歌曲列表
while (true) {
System.out.print("请输入要执行的操作序号:");
Scanner scan = new Scanner(System.in);
int command = scan.nextInt();// //接收键盘输入的功能选项序号
// 执行序号对应的功能
switch (command) {
case 0:// 添加歌曲至列表
addMusic(lineUpList);
break;
case 1:// 将歌曲置顶
setTop(lineUpList);
break;
case 2:// 将歌曲前移一位
setBefore(lineUpList);
break;
case 3:// 退出
exit();
break;
default:
System.out.println("----------------------------------");
System.out.println("功能选择有误,请输入正确的功能序号!");
break;
}
System.out.println("当前歌曲列表:" + lineUpList);
}
}
// 初始时添加歌曲名称
private static void addMusicList(LinkedList lineUpList) {
lineUpList.add("稻香");
lineUpList.add("夜曲");
lineUpList.add("夜的第七章");
lineUpList.add("听妈妈的话");
lineUpList.add("龙卷风");
System.out.println("初始歌曲列表:" + lineUpList);
}
// 执行添加歌曲
private static void addMusic(LinkedList lineUpList) {
System.out.print("请输入要添加的歌曲名称:");
String musicName = new Scanner(System.in).nextLine();// 获取键盘输入内容
lineUpList.addLast(musicName);// 添加歌曲到列表的最后
System.out.println("已添加歌曲:" + musicName);
}
// 执行将歌曲置顶
private static void setTop(LinkedList lineUpList) {
System.out.print("请输入要置顶的歌曲名称:");
String musicName = new Scanner(System.in).nextLine();// 获取键盘输入内容
int position = lineUpList.indexOf(musicName);// 查找指定歌曲位置
if (position < 0) {// 判断输入歌曲是否存在
System.out.println("当前列表中没有输入的歌曲!");
} else {
lineUpList.remove(musicName);// 移除指定的歌曲
lineUpList.addFirst(musicName);// 将指定的歌曲放到第一位
}
System.out.println("已将歌曲" + musicName + "置顶");
}
// 执行将歌曲置前一位
private static void setBefore(LinkedList lineUpList) {
System.out.print("请输入要置前的歌曲名称:");
String musicName = new Scanner(System.in).nextLine();// 获取键盘输入内容
int position = lineUpList.indexOf(musicName);// 查找指定歌曲位置
if (position < 0) {// 判断输入歌曲是否存在
System.out.println("当前列表中没有输入的歌曲!");
} else if (position == 0) {// 判断歌曲是否已在第一位
System.out.println("当前歌曲已在最顶部!");
} else {
lineUpList.remove(musicName);// 移除指定的歌曲
lineUpList.add(position - 1, musicName);// 将指定的歌曲放到前一位
}
System.out.println("已将歌曲" + musicName + "置前一位");
}
// 退出
private static void exit() {
System.out.println("----------------退出---------------");
System.out.println("您已退出系统");
System.exit(0);
}
}
在文件KTVByLinkedList.java中,第6-10行代码用于提示用户输入信息的格式。
第11行代码创建了歌曲列表,然后执行addMusicList()方法,即第40~47行代码,进行了歌曲初始化,添加了一部分歌曲至列表,初始化列表结果,进入while循环。
其中,第14~16行提示并接收用户发出的命令,之后通过switch判断接收到的命令,根据LinkedList集合中的方法对歌曲列表进行操作。