面向对象的基本编程

时间:2013-10-17 12:27:37

标签: java arrays oop object arraylist

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

actor类具有以下属性:
Name, Address, age, myFilm(将所有电影都保存为特定演员的阵列或阵言家 已经出演了。

电影类具有以下属性:
Name, Code(字符串,字符串)

我用getter和setter方法实现了这些类来处理数据:
到目前为止我的演员班:

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 个答案:

答案 0 :(得分:3)

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

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

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

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

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

答案 1 :(得分:2)

考虑将“在电影中扮演的角色”提取到另一个班级,将电影与演员分离出来(演员也可以做眼镜,vioce dubbig等,而不是特定的电影。)

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>将演员映射到他们玩过计时器的时间。

这可能是一个冗长的操作,所以你可以考虑兑现结果(如上图所示) - 解决方案可以是map,ActorStatistics类,演员等简单的timesPlayed字段等。

不要害怕对象

请勿使用强制解决方法将电影设为id(例如,与您的电影代码id相关联的String,这会增加另一种类型不兼容问题。 尝试使用更多对象引用而不是变通方法,并使用List而不是数组。

一般情况下,请阅读Java中的收藏集,例如ArrayListHashMap,并覆盖equals()hashCode(),一般情况下为OOP { {3}}和Single responsibility principle

答案 2 :(得分:1)

您可以在class actor内撰写自动增量容器,例如vector ArrayList等。或者您可以自己实现动态数组。

答案 3 :(得分:0)

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

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; 

}