任务场景:用集合,实现点歌功能,功能菜单如下:
实现思路:
创建一个功能类,实现点歌中的各个功能,然后主方法用于打印功能表
创建一个集合,用于存储歌曲,可以用ArrayList和 LinkedList集合中的方法。
代码实现如下:
方法一:
import java.util.*;
//菜单功能类
class Menu{
// 添加歌曲
public void addMusic(ArrayList<String> arr,String name){
arr.add(name);
System.out.println("已添加歌曲:"+name);
showMenu(arr);
}
// 歌曲置顶
public void fristMusic(ArrayList<String> arr,String name) {
if(arr.contains(name)) {
int i=arr.indexOf(name);
arr.remove(i);
arr.add(0,name);
showMenu(arr);
}else {
System.out.println("歌单没有·这首歌");
}
}
// 歌曲移前一位
public void nextMusic(ArrayList<String> arr,String name) {
if(arr.contains(name)) { //检查是不是包含这首歌
int i=arr.indexOf(name);
if(i==0) {
System.out.println("当前已经最前面的一首歌");
}else {
arr.remove(i);
arr.add(i-1,name);
}
showMenu(arr);
}else {
System.out.println("歌单没有这首歌");
}
}
// 显示歌表
public void showMenu(ArrayList<String> arr) {
// Iterator<String> it=arr.iterator();
// while(it.hasNext()) {
// Object obj=it.next();
// System.out.print(obj+" ");
// }
System.out.println(arr.toString());
}
}
public class test5{
public static void main(String[] args) {
System.out.println("------点歌系统------");
System.out.println("");
System.out.println("0.添加歌曲至列表");
System.out.println("1.将歌曲置顶");
System.out.println("2.将歌曲移到下一位");
System.out.println("3.退出");
ArrayList<String> arr=new ArrayList<>();
arr.add("稻香");
arr.add("夜曲");
arr.add("听妈妈的话");
arr.add("stay with me");
System.out.println("现在歌曲单:"+arr.toString());
Scanner sc=new Scanner(System.in);
Menu menu=new Menu();
while(true) {
System.out.println("请输入你的操作:");
int choose=sc.nextInt();
switch(choose) {
case 0:{
System.out.println("输入歌名:");
String name=(new Scanner(System.in)).nextLine();
menu.addMusic(arr,name);
break;
}case 1:{
System.out.println("输入要置顶的歌名:");
String name=(new Scanner(System.in)).nextLine();
menu.fristMusic(arr,name);
break;
}case 2:{
System.out.println("输入要移至下一位的歌名:");
String name=(new Scanner(System.in)).nextLine();
menu.nextMusic(arr,name);
break;
}case 3:{
System.out.println("退出系统");
exit();
break;
}default:{
System.out.println("输入有误!请重新输入");
break;
}
}
}
}
// 退出功能
private static void exit() {
System.exit(0);
}
}
方法二:
import java.util.*;
public class test1 {
public static void main(String[] args) {
System.out.println("------点歌系统------");
System.out.println("");
System.out.println("0.添加歌曲至列表");
System.out.println("1.将歌曲置顶");
System.out.println("2.将歌曲移到下一位");
System.out.println("3.退出");
ArrayList lineUpList=new ArrayList();
addMusicList(lineUpList);
while(true) {
System.out.println("");
Scanner sc=new Scanner(System.in);
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 exit() {
System.out.println("-----退出------");
System.out.println("你已经退出系统");
System.exit(0);
}
private static void setBefore(ArrayList lineUpList) {
System.out.println("输入要置前的歌曲名称:");
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 setTop(ArrayList lineUpList) {
System.out.println("请输入要添加的歌曲名称:");
String musicName=new Scanner(System.in).nextLine();
int position=lineUpList.indexOf(musicName);
if(position<0) {
System.out.println("当前列表没有输入的歌曲!");
}else {
lineUpList.remove(musicName);
lineUpList.add(0,musicName);
}
System.out.println("已将歌曲"+musicName+"置顶");
}
private static void addMusic(ArrayList lineUpList) {
System.out.println("请输入要添加的歌曲名称:");
String musicName=new Scanner(System.in).nextLine();
lineUpList.add(musicName);
System.out.println("已添加歌曲:"+musicName);
}
private static void addMusicList(ArrayList lineUpList) {
lineUpList.add("稻香");
lineUpList.add("夜曲");
lineUpList.add("夜的第七章");
lineUpList.add("听妈妈的话");
lineUpList.add("龙卷风");
System.out.println("初始歌曲列表为:"+lineUpList);
}
}
注意:Scanner类中的next()和nextLine()区分:
用next()输入时,输入扫描对象不能输入空格(即只有输入有效字符才能结束输入,而且在输入有效字符之前,空格都会抛弃,而在输入有效字符之后的空格也会抛弃)因为,它可以以空格判定是结束输入;而对于nextLine()输入时是以换行(Enter)为结束输入的,可以获取空格符。