主班。尝试遍历手中的卡片,并检查该值是否超过21。

int handValue;
for(int z = 0; z<hand.size(); z++){ //iterate through cards in hand
    Cards card = hand.get(z);       //to add values and check if bust (21)
    System.out.println(valueofcards);
    // hand.get(z).RankPoints()
    // Rank.valueOf(hand.get(z), a)
}
System.out.println("Bust.");//check if bust


Cards类包含具有方法RankPoints()的该枚举。我正在尝试从主类访问此方法,但是我尝试了很多google-foo却找不到解决方案。我原本以为问题是试图从ArrayList中使用它,但我不认为这是问题所在。

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

        private int RankPoints;

    Rank (int points){
        this.RankPoints = points;
    }

    public int RankPoints(){
        return this.RankPoints;
    }

}


这是使用枚举的卡片构造函数:

private final Rank rank;
private final Suit suit;

Cards(Suit suit, Rank rank) {
    this.rank = rank;
    this.suit = suit;
}


谢谢。

最佳答案

假设您的Card类具有getRank()方法,那么您将要使用它:

Rank rank = hand.get(z).getRank();
int points = rank.RankPoints(); // note methods should begin with a lower case letter.


然后,您可以从该Rank对象获得积分。

如果Card没有Rank getRank()“ getter”方法,则它需要一个。

例如。,

int handValue;
for(int z = 0; z<hand.size(); z++){ //iterate through cards in hand
    Cards card = hand.get(z);       //to add values and check if bust (21)
    Rank rank = card.getRank();  // better make sure Card has this method
    int points = rank.RankPoints();
    handValue += points;

    // check now that it's not > 21
    // ?? System.out.println(valueofcards);
}


同样,Cards类将需要一个getRank()getter方法:

public Rank getRank() {
   return rank;
}


顺便说一句,我将您的Cards类命名为Card,因为它定义了单个纸牌的蓝图。是的,您可以使用它为最多52张单独的卡创建实例,但是您对每张卡(实例)都使用一个相同的蓝图(类)。如果我的班级拥有一堆纸牌,我可能会使用“纸牌”之类的名称,但是您在这里也可以使用单数形式,例如“ Hand”(手)代表牌手或Deck(牌组)代表一副牌。

07-24 09:16