关于java的构造函数的一个问题 5C

假如我输入n个电影,如何在一个类下面创建n个电影对象,并在arrylist中根据对象的某个函数进行排序

3个回答

朋友你想创建n个电影对象,他们需要用外部自定义函数去排序,类的成员函数是对当前这个对象的一些操作,而你的类是电影,不是电影列表。
如果你想用成员函数解决这个问题,你可以创建一个电影列表的类,n个电影是一个此类对象的数据,然后编写相应的排序成员函数进行排序。
此外你说到了构造函数,若你采用电影列表的类,你可以有添排序所依靠的条件作为参数构造函数的其中一个参数。

你的问题很不清晰:“我输入n个电影 ” 请问你怎么输入n个电影?程序中没有“电影”这种东西,有的话只能是一个“电影对象”;那么既然你已经输入了n个电影对象了,又谈何创建n个电影对象,你这不已经输入进来了嘛?
当然,作为初学者,我猜测你是不是说你输入了n个电影的名字的字符串?要输入n个字符串,那么你说的“一个类”的构造函数就要接收一个字符串数组作为参数;而你的“电影类”就要提供一个接收电影名字符串作为参数的构造函数。遍历n个电影名的字符串数组,对每个名字new一个电影类,add到arraylist里。
要排序的话,电影类实现Comparable接口,在compare方法里编写比较逻辑,对Arraylist用Collections.sort()就可以了

首先,你的问题描述和标题不是很准确
然后,我根据你写的信息进行大胆假设,做出以下描述:
1.根据需求你可能需要2个类分别为 film(电影) 和 filmTools(辅助类)
2.简单代码如下:
/**

  • @description 电影对象
    */
    public class Film
    {
    public Film(int orderIndex)
    {
    this.orderIndex = orderIndex;
    }
    private int orderIndex;

    /**

    • 自定义排序函数
    • @return 优先级值 */ public int order() { return orderIndex; } } ```
 @description 电影处理的相关工具类  一般该类的函数为静态函数,
     但是假设玩家需要的构造函数的问题,所以这里改为通过构造函数处理
 */
public class FilmTools
{
    public FilmTools(int filmNum)
    {
        initFilm(filmNum);
        sortFilms();
    }
    /**存放电影列表**/
    private List<Film> list = new ArrayList<>();

    /**
     * 根据传入的参数 初始化电影列表
     * @param filmNum
     */
    private void initFilm(int filmNum)
    {
        list.clear();
        Random random = new Random();
        for(int i = 0 ; i <filmNum; i++)
        {
            //这里举例说明
           Film film = new Film(random.nextInt(filmNum) );
           list.add(film);
        }
    }

    /**
     * 对电影列表进行排序
     */
    public void sortFilms()
    {
        if(list == null)
        {
            return ;
        }
        //进行排序
        Collections.sort(list, new Comparator<Film>() {
            @Override
            public int compare(Film o1, Film o2) {
                return o1.order() - o2.order();
            }
        });
    }
}

当然题主的问题  我猜测可能是想知道 工厂模式 ,题主可以去了解一下  关于构造函数的行为设计模式

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!