簡體   English   中英

在switch語句中使用非常量表達式?

[英]Using a non-constant expression in a switch statement?

我是java的新手,並創建了一個創建一副牌的Java類,並為它們分配套件,名稱,值和ID。 問題是,有52種不同的卡需要ID,我一直在使用switch語句來分配名稱,值和套件。 但是,如果我要為卡ID做這個,我需要52行case語句,這太多了。

public class Deck {

    private Card[] cards;

    public Deck() {

        String suit = null;
        String name = null;  
        int cardID=0;
        int value = 0;
        cards = new Card[52];

        int arrayID=0;

        for (int i=1; i<=4; i++){ //number of suites
            for (int j=1; j <= 13; j++){ //number of card types
                for (int k=1; k==52; k++){ //number of cards

                    switch (i){
                    case 1: suit = "Clubs"; break;
                    case 2: suit = "Diamonds"; break;
                    case 3: suit = "Hearts";  break;
                    case 4: suit = "Spades"; break;
                    }

                    switch (j){
                    case 1: name = "Ace"; value = 11; break;
                    case 2: name = "Two"; value = 2; break;
                    case 3: name = "Three"; value = 3; break;
                    case 4: name = "Four"; value =4; break;
                    case 5: name = "Five"; value = 5; break;                             
                    case 6: name = "Six"; value = 6; break;
                    case 7: name = "Seven"; value = 7; break;
                    case 8: name = "Eight"; value = 8; break;
                    case 9: name = "Nine"; value = 9; break;
                    case 10: name = "Ten"; value = 10; break;                           
                    case 11: name = "Jack"; value = 10; break;
                    case 12: name = "Queen"; value = 10; break;
                    case 13: name = "King"; value = 10; break;                           
                    }
                    switch (k){
                    case k: cardID=k; break; //"Case expressions must be constant expressions"

                    }
                    Card card = new Card (cardID, name, suit, value);  
                    cards[arrayID] = card; 
                    arrayID++;
                }
            }
        }
    }

    public void printDeck(){
        System.out.println(Arrays.toString(cards));
    }

}

我可能做錯了,所以有沒有其他方法可以在不使用switch語句的情況下為卡分配唯一的ID?

這個switch語句沒有意義:

            switch (k){
            case k: cardID=k; break; //"Case expressions must be constant expressions"

            }

寫吧 :

cardID = k;

您可以使用枚舉,並且您可以使用序數值自動獲取每個計數,並且您可以在您的情況下擁有類似值的屬性,您可以這樣做:

public enum Cards {
    ACE(11), TWO(..), .. JACK(....;
    int value;
    public int getValue() {return value;}
}

System.out.println(CARDS.ACE.ordinal() + 1);
System.out.println(CARDS.ACE.getValue());
Output:
1
11

您不需要cardID的循環或switch語句。 你可以從ij合成它

for (int i=1; i<=4; i++){ //number of suites
        for (int j=1; j <= 13; j++){ //number of card types
                cardId = (i - 1) * 13 + j; // <<< synthesize cardID like this
                switch (i){
                case 1: suit = "Clubs"; break;
                case 2: suit = "Diamonds"; break;
                case 3: suit = "Hearts";  break;
                case 4: suit = "Spades"; break;
                }

                switch (j){
                case 1: name = "Ace"; value = 11; break;
                case 2: name = "Two"; value = 2; break;
                case 3: name = "Three"; value = 3; break;
                case 4: name = "Four"; value =4; break;
                case 5: name = "Five"; value = 5; break;                             
                case 6: name = "Six"; value = 6; break;
                case 7: name = "Seven"; value = 7; break;
                case 8: name = "Eight"; value = 8; break;
                case 9: name = "Nine"; value = 9; break;
                case 10: name = "Ten"; value = 10; break;                           
                case 11: name = "Jack"; value = 10; break;
                case 12: name = "Queen"; value = 10; break;
                case 13: name = "King"; value = 10; break;                           
                }
                Card card = new Card (cardID, name, suit, value);  
                cards[arrayID] = card; 
                arrayID++;
            }
        }

我會做的是:

創建一張類卡:

class Card {
    private String suit;
    private String name;
    private int ID;

    public Card(String suit, String name, int ID) {
        this.suit = suit
        (same for name & ID)}}

然后,在你的Deck類中,你可以擁有一個包含所有卡片的ArrayList,並使用一些方法在你的套牌中添加卡片:

s
class Deck {
    private ArrayList<Cards> myDeck = new ArrayList<Cards>();

    public void addCards(Card myCard) {
        this.myDeck.add(myCard); } }

編輯:忘記addCards中的變量類型

暫無
暫無

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

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