2015-12-23 70 views
1

我最近決定開始爲我的卡套裝使用枚舉,但似乎無法解決這個錯誤,無論我如何輸入代碼。爲什麼我得到一個SPADE不能解決類型錯誤?

編輯:

/** 
* 
* 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

+0

請不要在答案的基礎上改變你的問題。如果他們推薦已經存在於問題中的東西,就很難理解答案。如果需要,請在下面的問題中添加更新。 –

+0

你目前擁有的代碼不會給你一個像「SPADE無法解析爲某種類型」的錯誤。請在出現此錯誤的位置添加代碼。 –

+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,除非有一個很好的理由,希望能夠改變他們以後在這個類內,或者你想暴露setters爲他們(我無法想象會是什麼原因)
  • 檢查範圍value是在2和14之間;或者,爲卡片值創建一個枚舉。這是一次性的打字一點點,但它會導致更多的描述性的代碼(例如,你可以使用Value.ACE而不是想知道你是否應該使用1或14來表示卡)
+0

我打算創建一個枚舉值,但仍然試圖找出爲什麼日食說enum聲明有一個錯誤,即使徹底我做了編輯改變。 –

+0

我仍然收到與上述更改相同的錯誤。以上僅適用於特定的JRE嗎?我目前正在使用JRE1.8。 –

+0

它將支持任何支持'enum',所以Java 5以上。 –

0

如果要定義一個枚舉類型

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

如果你想要t Ô具有可變SUIT

SUIT suit; 
+0

我已經完成了小寫枚舉,但它會說枚舉不能被解析爲一個類型。 –

+0

在Java中,沒有枚舉只有枚舉。你必須改變''公共套件''套裝''公共套件'套裝和你的參數''套件套裝''套裝''套裝' –

+0

像這樣:public suit suit;公用卡(西裝套裝,詮釋價值){...}? –

0

enum是正確的您正在尋找的關鍵字。

UPDATE

爲了使您的代碼的工作,改變Suit(主要是錯字),以SUIT(由你聲明枚舉)

public class Card { 

    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; 
    } 
} 
+0

爲什麼要引入與每個SUIT值相關的值的複雜性? OP的問題並不要求:每張卡片都有一個價值,而不是每個西裝。 –

0

您最新的編輯顯示包含此代碼的截圖:

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

    public final SUIT suit; 

你枚舉聲明是好的。您收到錯誤消息「enum無法解析爲某種類型」這一事實表明您的編譯設置正在針對過時的Java版本。在Java 1.5之前,枚舉並不存在。

確保您使用的是最新的Java編譯器(1.8),然後進入你的項目的Eclipse屬性。點擊Java編譯器。在JDK合規性下,確保將其設置爲1.5或更高版本(最好爲1.8)。

你的下一個錯誤是,套裝!=套裝。小心你的信件。

+0

好的,工作謝謝!但是現在我注意到,即使通過我最近將它安裝在我的計算機上並設置了構建路徑,我也沒有1.8。在eclipse上我必須做些什麼才能讓它出現? –

+0

確保您已設置jdk1.8 PATH環境變量,下面甲骨文的說明](https://docs.oracle.com/javase/8/docs/technotes/guides/install/windows_jdk_install.html#BABGDJFH) 。然後,設置(或創建)環境變量JAVA_HOME以指向您的JDK目錄(例如C:\ Program Files \ Java \ jdk1.8.0_66)。最後,將Eclipse指向最新的jdk(例如,請參閱[This SO question](http://stackoverflow.com/questions/13635563/setting-jdk-in-eclipse)。) –

+0

我設置了JAVA_HOME變量,但還沒有找到任何指示如何處理它。上面的鏈接問題沒有太多說明。你可以就如何處理它提供一些建議嗎? –

相關問題