2011-06-28 14 views
0

私はクリケット選手を代表するクラスを書いています。クリケット選手の4つのタイプがありますクラス内の異なる種類のプレイヤーを表す

1改札プレーヤー
2打者
3ボウラー
4オールラウンダー

私は正しい道

public class Player { 
    final static int WICKETPLAYER=1; 
    final static int BATSMAN=2; 
    final static int BOWLER=3; 
    final static int ALLROUNDER=4; 
    int currentbatting; 
    int bowlerbating; 
    int playertype; 

    public Player(int i,int currentbatting){ 
     this.currentbatting=currentbatting; 
     playertype=i; 

    } 

    public String whatTypeOFplayer(){ 
     switch(playertype){ 
     case WICKETPLAYER: 
      return "wicketplayer" ; 
     case BATSMAN: 
      return " batsman"; 
     case BOWLER: 
      return "bowler"; 
     case ALLROUNDER: 
      return "allrounder"; 
      default: 
       return "error"; 
     } 
    } 


} 
で選手を代表していた場合、私はわからないんだけど
+1

これはcodereview.stackexchange.comに属します。 – Tsar

答えて

3

まず、tを表すためにenumを使用する必要があります彼

enum PlayerType { 
WICKETPLAYER, 
BATSMAN, 
BOWLER, 
ALLROUNDER 
} 

のようなプレーヤーのタイプの代わりに、int型、そして、あなたがPlayerTypeの文字列表現を取得するためにname()メソッドを使用することができます。

プレーヤーの名前だけが異なる場合(たとえば、行動、メソッドなどが異なる場合)、class WicketPlayer extends PlayerのようなサブクラスをPlayerにすることを検討してください。

第3の方法は、基本プレーヤクラスにPlayerBehaviourなどのコンポーネントを追加してコンポーネントを追加することです。

私は複雑さの言葉で言います。 1は最も簡単ですが、最も簡単です。 3は今あなたにとっては複雑すぎるかもしれません。だからあなたは試して、いいえを使うかもしれない。 1か否か。 2、あなたの要件に応じて。

+0

あなたの助けに感謝します。 – logic101

2

enumとEnumSetを使う方がよいでしょう。この場合

public Role { 
    WICKET_KEEPER, BATSMAN, BOWLER, FIELDER 
} 

public static final Set<Role> ALL_ROUNDER = EnumSet.allOf(Role.class); 
private final EnumSet<Role> roles; 
private Role position; 

public Player(EnumSet<Role> roles) { this.role = roles; } 

public void setPosition(Role role) { this.position = role; } 

public String whatTypeOFplayer(){ 
    return roles.equals(ALL_ROUNDER) ? "allrounder" : roles.toString(); 
} 

ところでその改札キーパーないWicketのプレーヤー
http://www.cricketscotland.com/system/files/images/13_13.jpg

0

- と私は宿題の匂いを嗅ぐため - あなたは、各プレイヤーのタイプごとに1つの基本クラスPlayerとサブクラスを使用する必要があります。

例:

public abstract class Player { 
// some attributes and methods all players share 

public abstract String whatTypeOfPlayer(); 
} 

public WicketPlayer extends Player { 
@Override 
public String whatTypeOfPlayer() { 
    return "Wicket Player"; 
} 
} 

はボーナス - その後、私は選手を作成するためのファクトリを使用したい:

public PlayerFactory { 
enum PlayerType {WICKETPLAYER, BATSMAN, BOWLER, ALLROUNDER} 

public static Player createPlayer(PlayerType type, String name) { 
    switch(type) { 
    case WICKETPLAYER : return new WicketPlayer(name); 
    //... 
    } 
} 
} 
0

は、Java 5を使用している場合+ Enum型を使用するJava Enum Types。実効Javaによると、一連の定数を使用する代わりにEnumを使用することは良い方法です。

public class Player { 

public enum Role{ 
    WICKETPLAYER, 
    BATSMAN, 
    BOWLER, 
    ALLROUNDER; 
} 
final int currentbatting; 
final Role playerRole; 

    public Player(final Role role, final int currentbatting){ 
     this.currentbatting=currentbatting; 
     this.playerRole=role; 

    } 

    public String whatTypeOFplayer(){ 
     return this.playerRole.toString(); 
    } 

}

1

より良い方法は、クラスプレーヤーを継承することで、それはあなたに、各プレーヤーと共通の行動のためのさまざまな行動のためのシンプルな治療が可能になります。例:

プレーヤー。Javaの

public class Player { 
    int currentbatting; 
    int bowlerbating; 
    int playertype; 

    public Player(int i,int currentbatting){ 
     this.currentbatting=currentbatting; 
     playertype=i; 
    } 

    public abstract String whatTypeOFplayer() { 
    return playertype; 
    } 
} 

WicketPlayer.java

public WicketPlayer extends Player { 
    public WicketPlayer(int i,int currentbatting){ 
    super(int i,int currentbatting); 
    playertype = "wicketplayer"; 
    } 
} 

Batsman.java

public Batsman extends Player { 
    public Batsman(int i,int currentbatting){ 
    super(int i,int currentbatting); 
    playertype = "batsman"; 
    } 
} 

のように。

関連する問題