7

我目前正在学习 Java,并被要求编写一个将演员和电影作为类处理的程序。

演员类具有以下属性:(
Name, Address, age, myFilm一个数组或数组列表,用于保存特定演员出演的所有电影。

film 类具有以下属性:
Name, Code(String, String)

我已经使用 getter 和 setter 方法实现了这些类来处理数据:
到目前为止,我的 actor 类:

public class actor {
    private String name;
    private String address;
    private int age;
    int[] myFilms = new int[3];

     public actor (String name, String address, int age) {
     }


     public void setName (String name) {
          this.name = name;
     }

     public void setAddress (String address) {
          this.address = address;
     }

     public void setAge (int age) {
          this.age = age;
     }

     public void setFilm () {

     }

     public String getName () {
         return name;
     }

     public String getAddress () {
         return address;
     }  
}

我的电影课:

public class film {

    private String name;
    private String code;

    //Constructor
    public film () {

    }

    public void setName (String name) {
        this.name = name;
    }

    public String getName (){
        return name;
    }

    public String getCode (String name) {
        //Get code:
        //Split Function
        String[] words = name.split("\\s+");
        String code = "";
        for (int i=0; i < words.length; i++) {
             code = code + words[i].charAt(0);
             code = code.toUpperCase();
        }
        return code;
    }
}

我在如何使节目动态显示每个演员的总电影方面遇到了困难。这是针对大学分配的,我还需要在某个时候对数组进行深层复制。我对 OO 几乎是全新的,所以这对我来说是一项棘手的任务。

任何建议或正确方向的观点将不胜感激。

4

4 回答 4

3

关于您的课程的两条评论...

  1. 为什么不这样宣布演员的电影:

    private List<Film> myFilms = new ArrayList<Film>();

    这样,您将能够动态地从您的演员对象中添加和删除电影对象引用。例如,您可以为列表实现 getter 和 setter 并从外部对其进行操作。列表(或一般的集合)比原始数组更容易操作。

  2. 考虑用第一个大写字母声明类,这是一个约定。例如:Actor, Film

于 2013-10-17T12:37:22.220 回答
2

考虑将“在电影中扮演的演员”提取到另一个类,以将电影与演员分离(演员也可以做剧院眼镜、配音等,而不是专门的电影。)

class ActorRole {
   private Actor actor;
   private Movie movie;
   private int dollarsSallary;
   private int scenesPlayed;
   // etc.
}

如果您不想这样做,我几乎可以肯定创建从电影到演员的依赖比从演员到电影更好,因为电影几乎肯定有演员:

class Movie {
  private List<Actor> actors = new ArrayList<Actor>();
}

这使得计算演员统计数据变得更加困难(您必须遍历所有电影),但我认为这是一个更好的设计。

要计算单个演员的节目:

for ( Movie movie : listOfAllMovies ) {
   if ( movie.getActors().contains( myActor ) ) { // read about equals() in Java !
     timesPlayed++;
   }
}

如果您想为更多演员进行排名,您可以使用Map<Actor,Integer>将演员映射到他们的出场次数计数器。

这可能是一个冗长的操作,因此您可以考虑兑现结果(如上图) - 解决方案可以是地图、ActorStatistics 类、actor 中的简单 timesPlayed 字段等。

不要害怕对象

不要费力地将电影映射到 id (比如你的id,它可能连接到你的电影代码String,这会增加另一个类型不兼容的问题。尝试使用更多的对象引用而不是解决方法,而List不是数组。

通常,请阅读 Java 中的集合,例如ArrayListandHashMap以及覆盖equals()and hashCode(),以及一般的 OOP单一职责原则类内聚

于 2013-10-17T12:45:37.777 回答
1

你可以在里面组成一个自增容器class actor,likevector ArrayList等等。或者你可以自己实现一个动态数组。

于 2013-10-17T12:41:08.853 回答
0

如果你有一个数据库,其中有一个包含用户名和电影(ID)等的表,你可以创建一个如下的类,

Class Film{

private String actorName;

private String filmCode;

private String filmName;

....getter & setter methods
...
}

然后你可以创建一个方法来获取 Film 类的数据列表。例如:

List<Film> filmList = new ArrayList<Film>();
String actorName = "Arnold";
filmList = dbCon.getFilmListByActor(actorName);

你的 getFilmListByActor 方法应该是这样的,

public List<Film> getFilmListByActor(String actorName){

List<Film> filmList = new ArrayList<Film>();
//Query for get film list by actor
 //assigne filmList to result set
enter code here
 return filmList; 

}
于 2014-03-11T07:36:16.437 回答