簡體   English   中英

如何實現枚舉類型的某些方法

[英]How to implement certain method for enum type

我是編程和Java的新手,目前正在學習枚舉類型。

我創建了一個枚舉類型的Card ,它將每張卡的值存儲在一副紙牌中,例如2 = 2、3 = 3 ... Ace =11。每張圖片卡具有相同的值10。

我正在嘗試實現方法getPrevious() ,該方法將返回列表中的上一個枚舉值。 例如,如果在SIX上調用了該方法,則它將返回FIVE ,而在TWO被調用時,將返回ACE 但是,我正在努力尋找一種方法來做到這一點。

在下面,您可以看到我所編寫的當前代碼,有關如何實現方法getPrevious()任何幫助或提示都將非常有用。

public class EnumPractice {

    public enum Card {
        TWO(2), THREE(3), FOUR(4), FIVE(5), SIX(6), SEVEN(7), EIGHT(8), 
        NINE(9), TEN(10), JACK(10), QUEEN(10), KING(10), ACE(11), ;

        private int value;
        private Card card;

        Card(int value){
        this.value = value;
        }

        public int getValue(){
            return value;
        }

        public String toString(){
            return "The value of this card is: " + value;
        }
    }

    public static void main(String[] args) {
        System.out.println(Card.ACE.getValue());
    }
}

您的getPrevious()方法如下所示

public enum Card {
    TWO(2), THREE(3), FOUR(4), FIVE(5), SIX(6), SEVEN(7), EIGHT(8),
    NINE(9), TEN(10), JACK(10), QUEEN(10), KING(10), ACE(11);

    private int value;

    Card(int value) {
        this.value = value;
    }

    public int getValue() {
        return value;
    }

    public Card getPrevious() {
        int previous = ordinal() - 1;
        if (previous < 0 ) { // if negative, then we have to go to the last element
            previous += values().length;
        }

        return Card.values()[previous];
    }
}

這是您的getPrevious()實現

import java.util.Arrays;

public class EnumPractice {

    public enum Card {

        TWO(2), THREE(3), FOUR(4), FIVE(5), SIX(6), SEVEN(7), EIGHT(8), 
        NINE(9), TEN(10), JACK(10), QUEEN(10), KING(10), ACE(11), ;

        private int value;
        private Card card;

        Card(int value){
        this.value = value;
        }

        public int getValue(){
            return value;
        }

        public String toString(){
            return "The value of this card is: " + value;
        }

        public Card getPrevious() {
            int pos = ordinal();
            if (pos == 0)
                return ACE;
            return values()[pos - 1];
        }
    }

    public static void main(String[] args) {

    System.out.println(Card.THREE.getPrevious());
    System.out.println(Card.TWO.getPrevious());

    }

}

上面的程序輸出是

The value of this card is: 2
The value of this card is: 11

其他方法可能是保留對先前卡的引用。 您可以在所有卡都在靜態塊中創建后進行設置,例如:

public enum Card {
    TWO(2), THREE(3), FOUR(4), FIVE(5), SIX(6), SEVEN(7), EIGHT(8), 
    NINE(9), TEN(10), JACK(10), QUEEN(10), KING(10), ACE(11);

    private int value;
    private Card previous;

    static{
        //lets set previous element for cards
        //we will iterate starting from TWO so its previous should be:
        Card previous = ACE;//yes ACE
        for (Card card : values()){
            card.previous = previous;
            previous = card; 
        }
    }

    Card(int value){
        this.value = value;
    }

    public int getValue(){
        return value;
    }

    public Card getPrevious(){
        return previous; //<-- simple getter is enough since we took care 
                         //    of setting this value earlier in static 
                         //    initialization block
    }

    public String toString(){
        return "The value of this card is: " + value;
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM