JAVA萌新学习day11 练习题

JAVA萌新学习day11 练习题

做个小练习题把

/*
创建 Song SongList SongListManager类
Song类
成员变量
1. 歌曲名 字符串类型
2. 歌曲类型 字符串类型
3. 歌手名 字符串类型
4. 歌曲播放时长

SongList类
成员变量
1.歌曲列表 Song数组类型
2.歌单名 字符串类型

方法
1.根据歌名搜索歌曲
2.根据歌手名搜索歌曲
3.根据歌手名删除歌曲


SongListManager类
成员变量
歌单列表 SongList数组类型
所有歌曲列表 保存目前所有歌曲 Song数组类型
方法
1.产生所有假数据的方法
2.根据歌单名搜索歌曲
3.创建新歌单

 */

/*
定义类 QFFileManager,QFFile
QFFile类
成员变量
1.文件数组  QFFile[]类型
2.是文件还是文件夹 Boolean类型
3.文件名 String字符串类型
4.是否被删除 Boolean类型
方法
1.载入当前文件夹下的所有内容
2.打印当前文件夹下的所有文件或文件夹的名字
QFFileManager
成员变量
1.某个目录下的所有内容      QFFile类型
2.根目录 字符串类型
方法
1.产生所有假数据的方法(随机文件夹或文件的类型和名字)
2.根据名字删除文件或文件夹
3.根据名字搜索指定的文件是否存在
 */

FileManagerDemo.java

public class FileManagerDemo {
    public static void main(String[] args) {
        System.out.println();


    }
}

SongDemo.java

/*
代码思路:
1.考虑需要几个类
2.考虑他们之间的关系
    2.1 继承关系(父子关系)
    2.2 组合关系:一个类中某个属性是另一个类类型的变量.
    Person类,人会使用工具 Tool类
    class Person{
        //人会使用工具
        Tool tool;
    }
3.考虑每个功能
    3.1 每个属性保存什么数据,用什么类型
    3.2 每个方法的功能是什么,完成这个功能需要什么条件(也就是需要什么参数),完成后需要提供什么样的结果(也就是返回值)
    3.3 生迷茫每一个属性(没有继承情况下,声明成私有),实现 setter 和 getter方法
    3.4 实现构造方法(根据实际需要,写出不同版本的构造方法)
    3.5 将设计的方法完成(如果能直接把方法功能完整实现最好,如果不能,只需要写出方法体,给出默认返回值)
4.假设所有类的功能都已经实现了,我们如何去使用它
    4.1 除了正常设计的类,我需要一个管理类
    4.2 如何产生程序中的数据
    4.3 需要管理类或某个类中有一个测试方法(需要是静态方法)
    4.4 在测试方法中,创建设计好的类对象,根据他们的关系,调用他们各自的方法检查业务流程是否能走通,方法实现是否存在问题.
5.根据实际测试的结果,重新修改类的设计,增加属性或方法,再重新测试.

注意事项:
1.写代码时,时刻考虑空指针的问题,也就是引用类型变量只声明,但没有赋值
2.引用类型的变量,一定要记得给他创建对象并赋值(初始化或创建实例)引用类型变量中保存的是对象在内存中的地址
    比如 Person p ; //在没有用new关键字给p创建对象并赋值前,不能调用p的任何方法和属性
    p.print();//空指针异常

    p = new Person();
    Person p2 = p;
    p2.print();//可以

    p2 = new Person();
    p = p2;
    p???????原来的对象就丢失了
3.目前数组越界异常,避免访问数组的下标超出数组下百奥的有效范围
*/
public class SongDemo {
    public static void main(String[] args) {
        System.out.println("SongDemo.main");
        SongListManager.test();
    }
}

SongListManager.java

import java.util.Random;

public class SongListManager {
    //保存所有歌单的数组
    private SongList[] lists;
   //保存所有歌曲的数组
    private Song[] songs;

    //
    public SongListManager(){
        this(2 , 10);
    }

    //两个参数的构造方法,传入 默认需要创建的歌单和歌曲数量.
    public SongListManager(int listCount , int songCount){
        lists = new SongList[listCount];
        songs = new Song[songCount];

        //完成数据的初始化
        randomData();
    }

    /*
    1.歌曲名 字符串类型
    2.歌曲类型 字符串类型
    3.歌手名 字符串类型
    4.歌手播放时长 整形
    5.是否删除 Boolean类型
    */
    //获得指定长度的随机字符串
    private String randomString(int length){
        String source = "abcdefghijklmnopqrstuvwxyz";
        Random random = new Random();
        String result = "";

        for (int i = 0; i < length; i++) {
            int index = random.nextInt(source.length());
            //从原字符串中获取指定索引位置字符
            result += source.charAt(index);

        }
        return result;
    }


    //产生原始数据的辅助方法
    private void randomData(){
        System.out.println("SongListManager.randomData");

        //产生所有的歌曲信息

        Random random = new Random();

        for(int i = 0 ; i < songs.length; i++){
            String songName = randomString(10);
            String songType = randomString(1);
            String songAuthor = randomString(5);

            int songTime = random.nextInt(120) + 120;

            Song s = new Song(songName , songType , songAuthor , songTime , false);
            /
            songs[i] = s;

            //测试
            s.print();
        }

        //产生所有歌单信息(创建三个歌单)
        for (int i = 0; i < 3; i++) {
            String name = randomString(3);
            createSongList(name,5);
        }
    }

    //根据歌单名搜索歌曲
    public SongList searchSongListByName(String name){
        System.out.println("SongListManager.searchSongListByName");

        for (int i = 0; i < lists.length; i++) {
            SongList list = lists[i];
            if(list != null) {

                if (list.getName().equals(name)) {
                    return list;
                }
            }
        }

        return null;
    }

    //搜索第一个可以保存新歌单的位置,也就是lists数组的可用下标
    public int searchIndex(){
        for (int i = 0; i < lists.length; i++) {
            //如果歌单被标记成删除,说明此位置可以保存新歌单
            SongList temp = lists[i];
            if(temp != null && temp.isDelete()){
                return i;
            }
        }
        //返回-1,说明无可用位置
        return -1;
    }

    //向歌单列表数组中添加一个新的歌单
    public boolean addSongList(SongList newList){
        int index = searchIndex();
        if(index != -1){
            //将新歌单保存到找到的可用位置
            lists[index] = newList;
        }
        else {
            //创建一个新数组,在根据原数组大小进行扩容,扩容的规则我们自己定
                SongList[] newLists = new SongList[lists.length + 10];
            //把原数组的所有内容保存到新数组中,最后将newList也保存到新数组中.
            for (int i = 0; i < lists.length; i++) {
                //把原数组的每一个元素保存到新数组中
                newLists[i] = lists[i];
            }
            //保存到就数组所有元素之后,将歌单
            newLists[lists.length] = newList;

            //将新数组保存到成员变量中
            lists = newLists;
        }

        return true;

    }

    //创建新歌单
    public boolean createSongList(String name , int count){
        System.out.println("SongListManager.createSongList");

        SongList find = searchSongListByName(name);
        //如果返回空对象,说明指定名称的歌单没有找到,创建一个新的
        if(find == null){
            //创建一个新歌单
            find = new SongList(name, count);
            //保存新歌单
            addSongList(find);

        }
        return false;
    }

    public void print(){
        for (int i = 0; i < lists.length; i++) {

            //lists[i].print();
            //防止空指针
            SongList temp = lists[i];
            if(temp != null){
                temp.print();;
            }
        }
    }

    //我们静态的测试方法
    public static void test(){
        System.out.println("SongListManager.test");
        SongListManager lm = new SongListManager();

        SongList list = lm.searchSongListByName("最爱");

        //如果找到了歌单对象才允许后续操作
        if(list != null) {

            //根据歌名从歌单中搜索歌曲
            Song song = list.searchSong("火苗");

            boolean isSuccsee = list.deleteSongByAuthor("格格");
            System.out.println("删除歌曲:" + isSuccsee);
        }

        lm.print();
    }
}

那么我们接下来再留一道小作业

/*
作业:

1.设计两个类 公司类和员工类
2.员工类
属性:
姓名 年龄 电话 部门 ...
方法:
打印
3.公司类
属性:
名称 地址 所有员工
方法:
根据员工的名字查找员工
根据员工的电话查找员工
根据员工的名字删除员工
根据员工的电话删除员工
增加新员工
统计某一个部门有多少员工
*/

版权声明:本文为weixin_43628976原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。