从不同类的ArrayList中的对象中查找ENUM的值

时间:2014-09-20 18:17:40

标签: java arraylist enums

主要课程。尝试迭代手中的卡片,并检查该值是否超过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;
}

感谢。

1 个答案:

答案 0 :(得分:0)

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

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

然后你就可以从这个Rank对象中获得分数。

如果卡没有Rank getRank()&#34; getter&#34;方法,然后它需要一个。

如,

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

顺便说一句,我会将你的卡类命名为卡,因为它定义了一张扑克牌的蓝图。是的,您可以使用它为多达52个单独的卡创建实例,但是您为每个卡(实例)使用一个相同的蓝图(类)。如果我有一个持有一堆卡片的课程,我可能会使用像卡片这样的名字,但你也可以在这里使用单数形状,例如Hand for a card hand或Deck for a deck of cards。