主班。尝试遍历手中的卡片,并检查该值是否超过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(牌组)代表一副牌。