7

私は現在 Java を勉強しており、俳優や映画をクラスとして扱うプログラムを書くように依頼されています。

アクター クラスには次の属性があります:
Name, Address, age, myFilm(特定の俳優が出演したすべての映画を保持するための配列または配列リスト。

film クラスには次の属性があります:
Name, Code(String, String)

データを処理する 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

4 に答える 4

3

あなたのクラスについての 2 つのコメント...

  1. 俳優の映画を次のように宣言してみませんか。

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

    このようにして、映画オブジェクト参照をアクター オブジェクトから動的に追加および削除できます。たとえば、リストのゲッターとセッターを実装して、外部から操作できます。リスト (またはコレクション全般) は、プリミティブ配列よりも操作がはるかに簡単です。

  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.
}

そうしたくない場合は、映画にはほとんど確実にactosがあるため、映画から俳優への依存関係を作成する方が、俳優から映画への依存関係を作成するよりも優れていると確信しています。

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

これにより、俳優の統計をカウントするのが難しくなります (すべてのムービーを反復処理する必要があります) が、これはより良い設計だと思います。

1 人の俳優のショーをカウントするには:

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

より多くのアクターのランキングを作成したい場合は、 を使用Map<Actor,Integer>して、アクターをプレイ回数カウンターにマップできます。

これは時間のかかる操作になる可能性があるため、(上記のマップのように) 結果をキャッシュすることを考えることができます。解決策は、マップ、ActorStatistics クラス、アクターの単純な timesPlayed フィールドなどです。

物を恐れないで

フィルムを id にマップするための難しい回避策を実行しないでください (idフィルムコードに適切に接続されている のように、String別のタイプの非互換性の問題が追加されます。回避策のList代わりに、配列の代わりに、より多くのオブジェクト参照を使用してみてください。

一般に、Java のコレクションについて読んでくださいArrayListHashMapequals()hashCode()

于 2013-10-17T12:45:37.777 に答える
1

class actorなどの内部で自動インクリメント コンテナを作成できますvector 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 に答える