Java LinkedList之KTV点歌系统

/**
* @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()方法一步到位!

总结: 不急不躁,加油吧!

  • 30
    点赞
  • 132
    收藏
    觉得还不错? 一键收藏
  • 8
    评论
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值