来源:Java基础案例教程
任务介绍
使用LinkedList实现编写模拟KTY点歌系统的程序。在程序中,指令0代表添加歌曲,指令1代表将所选歌曲置顶,指令2代表将所选歌曲提前一位,指令3代表退出该系统。要求根据用户输入的指令和歌曲名展现列表
实现思路
(1)为了指引用户操作,首先要将各个指令所表示的含义打印到控制台
(2)程序中需要创建一个集合作为歌曲列表,并向其添加一部分歌曲
(3)由于控制台需要实时等待用户输入命令,所以可以使用while(true)来使程序一直处于等待用户输入指令的装态
(4)可以通过Scanner类的nextInt()方法来接收控制台的信息
代码
import java.util.LinkedList;
import java.util.Scanner;
public class KTVByLinkedList {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("------------------欢迎来到点歌系统----------------");
System.out.println("0.添加歌曲至列表");
System.out.println("1.将歌曲置顶");
System.out.println("2.将歌曲前移一位");
System.out.println("3.退出");
LinkedList<String> lineUpList = new LinkedList<String>(); // 创建歌曲列表
addMusicList(lineUpList); // 添加一部分歌曲至歌曲列表
System.out.println("当前歌曲列表:" + lineUpList);
while (true) {
System.out.println("请输入要执行的操作序号");
int command = sc.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<String> list) {
list.add("像我这样的人");
list.add("牧马城市");
list.add("二零三");
list.add("十年");
}
/**
* 执行添加歌曲
*/
private static void addMusic(LinkedList<String> list) {
Scanner sc = new Scanner(System.in);
System.out.println("请输入要添加的歌曲名称:");
String music = sc.nextLine();
list.add(music); // 将歌曲添加到列表最后
System.out.println("已添加歌曲:" + music);
}
/**
* 执行将歌曲置顶
*/
private static void setTop(LinkedList<String> list) {
Scanner sc = new Scanner(System.in);
System.out.println("请输入要置顶的歌曲名称:");
String music = sc.nextLine();
int position = list.indexOf(music); // 查找指定歌曲的位置
if (position < 0) {
System.out.println("单曲列表中没有该歌曲");
} else {
list.remove(position); // 移除指定的歌曲
// 或 list.remove(music);
list.addFirst(music); // 将指定的歌曲放到第一位
// 或 list.add(0, music);
}
System.out.println("应将歌曲" + music + "置顶");
}
/**
* 执行将歌曲提前一位
*/
private static void setBefore(LinkedList<String> list) {
Scanner sc = new Scanner(System.in);
System.out.println("请输入要置前的歌曲名称");
String music = sc.nextLine();
int position = list.indexOf(music); // 查找指定歌曲的位置
if (position < 0) {
System.out.println("单曲列表中没有该歌曲");
} else if (position == 0) {
System.out.println("该歌曲已经在第一位");
} else {
list.remove(music);
list.add(position - 1, music);
}
System.out.println("应将歌曲" + music + "提前一位");
}
/**
* 退出
*/
private static void exit() {
System.out.println("----------------退出----------------");
System.out.println("您已退出点歌系统");
System.exit(0);
}
}
运行结果