当前位置: 首页 > 知识库问答 >
问题:

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

崔涵亮
2023-03-14

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

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循环通过卡遍历每个元素。适合values(),然后是Card。等级values()并根据其在阵列卡中的索引创建一张新卡(套装、等级)。

当我编译我的代码时,它会给出错误。

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

卡片【套装】【等级】=新卡片(套装,等级);“”

共有1个答案

罗梓
2023-03-14

数组中的索引需要是整数,但在第行卡[套装][排名]=...您正在传递由套装(如CLUBS)和排名持有的枚举常量。您可以使用Enum#顺序()方法获取表示当前枚举常量位置的int。

更改您的

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

cards[suit.ordinal()][rank.ordinal()] = new Card(suit, rank);
//        ^^^^^^^^^^      ^^^^^^^^^^
 类似资料:
  • 问题内容: 我已经看过Scala有关模拟Javaenum和case类与Enumeration的问题,但是似乎付出了太多的努力却却获得了太多的好处。 基本上,我希望有一个方法可以返回的所有单例对象,而无需重复几次。 这是我的代码的样子: 该方法应该返回类似如下的内容: 一切都应该发生在特征中,所以我只需要扩展它即可获得功能。 有什么建议可以做到这一点吗?这个想法是访问类并找到它们正在扩展的类的所有单

  • 我有这门课: 我试图使用java流从AirbnbListing对象的ArrayList中收集整数价格: 但我得到了“不兼容类型:推断变量R有不兼容的边界”。不确定问题是什么。

  • 嗨,我正在制作一个程序,该程序应该采用字母等级并将其转换为 GPA 值。程序的第一部分取了一个百分比并将其转换为字母等级,现在我正在尝试将转换后的字母等级转换为 int 值。我们只允许使用开关盒。但是,在执行此操作时,我发现一个不兼容的类型错误:java.lang.String required: int。不确定我需要更改什么,有什么帮助吗? 谢谢。

  • 问题内容: 我想采用一个现有的枚举,并向其添加更多元素,如下所示: 这在Java中可行吗? 问题答案: 不,你无法使用Java执行此操作。除了别的什么,d大概就是A(扩展的“正常”想法)的一个实例,但是只知道这一点的用户却一无所知-这违背了枚举作为一组众所周知的集合的观点。价值观。 如果你可以告诉我们更多有关如何使用它的信息,我们可能会建议其他解决方案。

  • 问题内容: 我有一个实现该接口的类,但是Java的foreach循环需要该接口。是否有一个到适配器在Java的标准库? 问题答案: 您需要一个所谓的“适配器”,以适应不兼容的。Apache commons- collections具有。用法是:

  • 我一直试图编译这个简单的警报对话框,以便在用户单击提交按钮时显示。编译代码时会弹出一条错误消息: 错误:(33,74)错误:不兼容的类型: 这个类叫做Login_Activity,它扩展了BaseActivity,它扩展了Activity。