假如我输入n个电影,如何在一个类下面创建n个电影对象,并在arrylist中根据对象的某个函数进行排序
朋友你想创建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;
/**
@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();
}
});
}
}
当然题主的问题 我猜测可能是想知道 工厂模式 ,题主可以去了解一下 关于构造函数的行为设计模式