代表班上不同类型的球员

时间:2011-06-28 10:47:38

标签: java

我正在写一个代表板球运动员的课程。有四种类型的板球运动员

1个wicket球员
2击球手
3个投球手
4 allrounder

我不确定我是否以正确的方式代表球员

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";
      }
  }


}

6 个答案:

答案 0 :(得分:3)

首先,您应该使用枚举来代表玩家类型而不是整数,例如

enum PlayerType {
 WICKETPLAYER,
 BATSMAN,
 BOWLER,
 ALLROUNDER
}

然后您可以使用name()方法获取PlayerType的字符串表示。

如果只有名称的玩家类型(例如,不同的行为,方法等)更多,您可以考虑创建Player的子类,如class WicketPlayer extends Player

第三种方法是使用合成并向基本玩家类添加PlayerBehaviour等组件。

我的复杂性,我会说不。 1是最简单的,而没有。 3现在可能对你来说太复杂了。所以你可以尝试使用否。 1还是不。 2,取决于您的要求。

答案 1 :(得分:2)

使用枚举和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();
}

BTW它是一个Wicket守门员而不是Wicket球员
http://www.cricketscotland.com/system/files/images/13_13.jpg

答案 2 :(得分:1)

更好的方法是从类Player继承,它将允许您为每个玩家提供更简单的处理以及针对常见操作的不同行为。例如:

Player.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";
  }
}

等等。

答案 3 :(得分:0)

答案 4 :(得分:0)

在这种情况下 - 因为我闻到了作业 - 你应该为每个玩家类型使用一个基类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);
     //...
   }
 }
}

答案 5 :(得分:0)

如果您使用的是Java 5+,请使用枚举类型Java Enum Types。根据Effective 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();
  }

}