/**
* @author StormWangxhu
* @version 创建时间:2017年11月4日 上午9:50:42
*
*/
好好学习,天天向上!
今天来练习一下昨天学的ArrayList和LinkedList.
通过一个简单KTV点歌系统,达到练习LinkedList的方法使用。
KTV点歌系统介绍
功能介绍:
1、将歌曲置顶
2、将歌曲前移一位
3、退出系统
4、添加歌曲到列表
实现步骤:
1、
- (1)、为了指引用户操作,首先将各个指令打印到控制台。
- (2)、程序中需要创建一个集合作为歌曲列表,并向其添加一部分歌曲。
- (3)、由于控制台需要实时等待用户的输入,所以用while(true)来使程序一直处于等待用户输入指令的状态。
- (4)、可以通过Scanner类的nextInt()方法接受来自控制台的信息。
- (5)、可以使用switch语句,根据控制台传入的指令,判断应该执行的操作。
- (6)、通过LinkedList集合或ArrayList集合定义的方法操作歌曲列表。
代码实现:
package com.stormwang.ListTest;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.Scanner;
/**
* @author StormWangxhu
* @version 创建时间:2017年11月4日 上午9:50:42
*
*/
/**
* KTV点歌系统:
* 主要应用 LinkedList 增删改查
* 五个模块:
* 模块一: 初始化列表
* 模块二: 添加歌曲至列表
* 模块三: 将歌曲至顶
* 模块四: 将歌曲前移一位
* 模块五 : 退出系统
* */
public class KTVByLinkedList {
public static void main(String[] args) {
// TODO Auto-generated method stub
//初始化列表
System.out.println("---------------欢迎来到KTV点歌系统------------------");
System.out.println("0------添加歌曲至列表");
System.out.println("1------将歌曲至顶");
System.out.println("2------将歌曲前移一位");
System.out.println("3------退出系统");
System.out.println("4------将歌曲乱序");
//接受用户的输入
System.out.println("请输入数字来实现相应功能:");
//创建歌曲列表
LinkedList linkedList = new LinkedList<>();
//初始化列表
addListMusic(linkedList);
while (true) {
Scanner scanner = new Scanner(System.in);
int number = scanner.nextInt();
switch(number) {
case 0 :
addMusic(linkedList);
break;
case 1 :
setTop(linkedList);
break;
case 2 :
setBefore(linkedList);
break;
case 3 :
exit();
break;
default :
System.out.println("您输入的数字有误,请重新输入!");
break;
}
}
}
// 模块一 :初始化列表
private static void addListMusic(LinkedList linkedList) {
// TODO Auto-generated method stub
linkedList.add("旧情人,我是时间的新欢");
linkedList.add("奔跑");
linkedList.add("感谢--龙井说唱");
linkedList.add("完美生活");
linkedList.add("执着");
linkedList.add("我们的时光---赵雷");
System.out.println("歌单中有歌曲 :"+linkedList.size()+" 首 !");
System.out.println("歌单列表为:");
Iterator iterator = linkedList.iterator();
while (iterator.hasNext()) {
Object object = (Object) iterator.next();
System.out.println(object);
}
}
//模块二: 实现将歌曲添加至列表
private static void addMusic(LinkedList linkedList) {
System.out.print("请输入您要添加歌曲的名称: ");
Scanner scanner = new Scanner(System.in);
String addMusicName = scanner.nextLine();
//若存在,则不输入,反之添加成功
if (((linkedList.indexOf(addMusicName)) ==-1)) {
//不存在,则将歌曲添加至集合末尾
linkedList.addLast(addMusicName);
System.out.println("添加成功!");
}else {
System.out.println("您要添加得歌曲已在列表中!");
}
System.out.println("修改后歌单:");
for (Object object : linkedList) {
System.out.println(object);
}
}
//模块五: 实现退出系统
private static void exit() {
System.out.println("感谢您的使用!");
System.out.println("-----------您已退出系统-------------");
//退出程序
System.exit(0);
}
//模块四 : 将歌曲前移一位
private static void setBefore(LinkedList linkedList) {
System.out.print("请输入您要至前歌曲的名称:");
Scanner scanner = new Scanner(System.in);
String musicName = scanner.nextLine();
//查找指定歌曲位置
int position ;
position = linkedList.indexOf(musicName);
if (position==0) {
System.out.println("已到顶部,无法前移!");
}else if (position<0) {
System.out.println("该歌曲不在列表中,请重新输入:");
}else {
//歌曲存在,且不在第一位,进行前移
linkedList.remove(musicName);
linkedList.add(position-1, musicName);
System.out.println("前移一位成功!");
System.out.println("当前歌曲名单列表:");
Iterator iterator = linkedList.iterator();
while (iterator.hasNext()) {
Object object = (Object) iterator.next();
System.out.println(object);
}
}
//判断要至前歌曲是存在
}
//模块三 : 将歌曲置顶
private static void setTop(LinkedList linkedList) {
System.out.print("请输入将要置顶歌曲的名称:");
Scanner scanner = new Scanner(System.in);
String topMusicName = scanner.nextLine();
//获得歌曲在列表中的位置
int position ;
position = linkedList.indexOf(topMusicName);
//判断是否已在第一位
if (position==0) {
System.out.println("该歌曲已在顶部!");
}if (position<0) {
System.out.println("歌名输入有误,不存在该歌曲!");
}else {
linkedList.remove(topMusicName);
linkedList.addFirst(topMusicName);
/*
* 此处若为ArrayList 若要置顶元素
* 代码如下:
* arraylist.add(0,topMusicName);
*
* 区别:
* ArrayList的add()方法需要指定元素的索引位置来实现
* LinkedList的add()方法一步到位!
* 这也体现出了LinkedList强大的增删功能!
* */
System.out.println("置顶成功!");
}
System.out.println("修改后的歌单:");
for (Object object : linkedList) {
System.out.println(object);
}
}
}
运行后效果图:
再来一张:
特别提醒:
ArrayList和LinkedList在将歌曲置顶方法中,略有区别:
ArrayList的add()方法代码:
arraylist.add(0,topMusicName);
LinkedList的add()代码:
linkedList.addFirst(topMusicName);
区别:
ArrayList的add()方法需要指定元素的索引位置来实现
LinkedList的add()方法一步到位!
总结: 不急不躁,加油吧!