为什么我得到SPADE无法解决类型错误?

时间:2015-12-23 09:45:52

标签: java enums

我最近决定开始使用enum作为我的卡套装,但无论我如何键入代码,似乎无法解决此错误。

编辑:

/**
 * 
 * A basic constructor class that build the card object. 
 * The card object will contain value for both the Suit and 
 * card's Value.
 * 
 * 
 *
 */
public class Card {

    public Enum SUIT{SPADE, CLUB, DIAMOND, HEART};

    // This will identify the card suit.
    public Enum suit; 
    //This will hold the card value.
    //Jack = 11 ... Ace = 14
    public int value;


    public Card(Enum suit, int value){

        this.suit = suit;
        this.value = value;
    }
}

我在网站上查找了各种答案,并查看了Orcacle上的官方Java文档。有人可以帮我解决这个问题吗?

更新:

/**

*  *构建卡对象的基本构造函数类。  *卡片对象将包含套装和套装的价值  *卡的价值。  *  *  *  * / 公共类卡{

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

// This will identify the card suit.
private final Suit suit; 
//This will hold the card value.
//Jack = 11 ... Ace = 14
private final int value;


public Card(Suit suit, int value){

    this.suit = suit;
    this.value = value;
}

}

这里是错误的屏幕截图: A screenshot of the error

4 个答案:

答案 0 :(得分:2)

Enum是一个类名(它是base class of all enums)。您需要将Suit类声明为:

public enum Suit{SPADE, CLUB, /* etc */}

然后,为了接受Suit的实例作为构造函数的参数,请创建参数类型Suit以及相应的字段:

public Suit suit;
public int value;

public Card(Suit suit, int value) {
  this.suit = suit;
  this.value = value;
}

其他一些观察结果:

  • 将您的suitvalue字段设为私有,并添加访问者方法(getSuit()getValue())。目前,没有什么能阻止课外的人改变它们。
  • 另外,考虑制作它们final,除非有充分的理由希望能够在这个类中稍后更改它们,或者你想为它们公开setter(我无法想象这是什么原因)会是)
  • 检查value的范围是2到14之间;或者,为卡值创建枚举。这是一次性的一次性打字,但它会导致更多的描述性代码(例如,您可以使用Value.ACE而不是想知道是否应该使用1或14代表该卡)

答案 1 :(得分:0)

如果要定义枚举类型

// lowercase
public enum SUIT{SPADE, CLUB, DIAMOND, HEART};

如果你想拥有变量SUIT

SUIT suit;

答案 2 :(得分:0)

public static int convertStringToInt(String num) { int result = 0; for (char c: num.toCharArray()) { c -= 48; if (c <= 9) { result = (result << 3) + (result << 1) + c; } else return -1; } return result; } 是您正在寻找的正确关键字。

<强>更新

要使代码正常工作,请将enum(主要是拼写错误)更改为Suit(由您声明的枚举)

SUIT

答案 3 :(得分:0)

您的最新编辑显示了包含以下代码的屏幕截图:

public class Card {
    public enum Suit {SPADE, CLUB, DIAMOND, HEART};

    public final SUIT suit;

你的枚举声明没问题。您收到错误消息&#34;枚举的事实无法解析为类型&#34;建议您的编译设置针对Java的过时版本。在Java 1.5之前,枚举不存在。

确保使用最新的Java编译器(1.8),然后进入项目的Eclipse属性。单击Java Compiler。在JDK合规性下,确保将其设置为1.5或更高版本(最好是1.8)。

你的下一个错误是SUIT!= Suit。小心你的信件。