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

總結: 不急不躁,加油吧!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章