13

我想一起定义字符串和整数,但它给出了错误。

public class Card {
    Rank rank;
    Suit suit;
    public Card(Rank rank, Suit suit){
        this.rank=rank;
        this.suit=suit;
    }
    public enum Rank { Ace, 9, Queen, King } //and other suits
}

该错误是令牌 9 上的语法错误,请删除此令牌。

4

6 回答 6

9

s里面的东西enum标识符,将被创建的静态最终(常量)对象的名称。因此,您不能使用 int 来命名对象。

enums 允许您为每个条目放置字段:

public static enum Suit {HEART,DIAMOND,SPADE,CLUB}

public static enum Cards {
    ACE_OF_HEART(Suit.HEART,14), QUEEN_OF_SPADE(Suit.SPADE,13) /* etc etc*/;

    private final Suit mSuit;
    private final int mRank;

    private Cards(Suit suit, int rank) {
        assert rank >= 2 && rank <= 14;
        mSuit = suit;
        mRank = rank;
    }

    public Suit getSuit() {
        return mSuit;
    }

    public int getRank() {
        return mRank;
    }
}

您真的不想以这种方式对所有 52 张卡片进行编码。你可以用另一种方式建模:

套房:

public static enum Suit { SPADE, HEART, DIAMOND, CLUB};

具有一些流行等级作为命名常量的类:

public class Card{

  public static final int ACE = 14;
  public static final int QUEEN = 13;
  public static final int KING = 12;
  public static final int JACK = 11;

  private final int mRank;
  private final Suite mSuit;

  public Card(Suite s, int r){
    this.mSuit = s;

    if(r < 2 || r > 14){
      throw new IllegalArgumentException("No such card with rank: "+r);
    }    

    this.mRank = r;
  }

  public Suit getSuit() {
        return mSuit;
    }

    public int getRank() {
        return mRank;
    }
}
于 2013-08-15T08:57:21.807 回答
9

在 Java 中声明枚举时,{ Ace, 9, Queen, King }这些不是字符串和整数。这些是枚举的实际对象。

你可以这样做:

 public enum Rank { 
     Ace(13), 
     Nine(8),
     //etc
     ;

     private int rank;

     Rank(int rank) {
         this.rank = rank;
     }

     public int getRank() { 
         return rank;
     }
 }
于 2013-08-15T08:35:08.610 回答
3

您不能以数字开头的枚举字段。尝试使用NINE.

于 2013-08-15T08:35:02.110 回答
2

Java 命名规则说你不能用数字开始变量、类名等。

于 2013-08-15T08:35:21.013 回答
1

U 不能像这样在枚举中使用整数。请通过这个:http ://docs.oracle.com/javase/tutorial/java/javaOO/enum.html

于 2013-08-15T08:39:14.190 回答
1

尝试

public enum Rank    { Ace, Jack,  Queen, King }//and other suits

而不是你的枚举

问题是,如果您可以将数字作为枚举值,那么编译器将不知道,当有人写“9”时,他的意思是数字或枚举。所以java,几乎每一种语言,都不允许这种枚举值

于 2013-08-15T08:36:06.577 回答