迭代枚举元素以创建新对象时,不兼容的类型错误

时间:2017-12-09 23:07:18

标签: java for-loop enums

我正在尝试使用两个枚举通过二维数组创建一副牌,然后打印所有创建的卡片。

public class Deck {

private Card[][] cards;

public Deck() {
  cards = new Card[4][13];
  for (Card.Suit suit : Card.Suit.values()) {
     for (Card.Rank rank : Card.Rank.values()) {
        //This is where my problem begins
        cards[suit][rank] = new Card(suit, rank);
     }
  }
}



public Card getCard(Card.Suit s, Card.Rank r) {
   //The error appears here as well.
   return cards[suit][rank];
}

以下是我正在尝试使用的枚举。

public class Card {
   private Rank rank;
   private Suit suit;

   // Kinds of suits
   public enum Suit {
      CLUBS,
      DIAMONDS,
      HEARTS,
      SPADES;
   }

   // Kinds of ranks
   public enum Rank {
      ACE,
      DEUCE,
      THREE,
      FOUR,
      FIVE,
      SIX,
      SEVEN,
      EIGHT,
      NINE,
      TEN,
      JACK,
      QUEEN,
      KING;
   }

   public Card(Suit s, Rank r) {
      rank = r;
      suit = s;
   }
...}

我认为应该发生的是for循环通过Card.Suit.values()然后通过Card.Rank.values()并创建一个新的Card(西装套装,排名等级),通过每个元素,根据它是阵列卡中的索引[s] [r]。

编译代码时,会出错。

“Deck.java:42:错误:不兼容的类型:套装无法转换为int

卡[西装] [等级] =新卡(西装,等级);“

1 个答案:

答案 0 :(得分:2)

数组中的索引需要是整数,但是在行<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <input type="button" class="green color" value="green" /> <input type="button" class="blue color" value="blue" />处,您传递的是cards[suit][rank] = ...(例如suit)和CLUBS所持有的枚举常量。您可以使用Enum#ordinal()方法获取表示当前枚举常量的位置的int。

更改您的

rank

cards[suit][rank] = new Card(suit, rank);