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

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 に答える
9

enums内のものはidentifiersであり、作成される静的な最終 (定数) オブジェクトの名前です。したがって、オブジェクトの名前に int を使用することはできません。

enum各エントリのフィールドを配置できます。

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 に答える
3

列挙型フィールドを数値で開始することはできません。を使ってみてくださいNINE

于 2013-08-15T08:35:02.110 に答える
2

Java の命名規則では、変数やクラス名などを数字で始めることはできません。

于 2013-08-15T08:35:21.013 に答える
1

試す

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

あなたの列挙型の代わりに

問題は、数値を列挙値として入力できた場合、コンパイラーが認識できないことです。誰かが「9」と書いたときに、彼は数値または列挙を意味していました。そのため、ほとんどすべての言語と同様に、Java はこの種の列挙値を許可しません。

于 2013-08-15T08:36:06.577 に答える
1

U は、このように enum 内で整数を使用できません。これを読んでください:http://docs.oracle.com/javase/tutorial/java/javaOO/enum.html

于 2013-08-15T08:39:14.190 に答える