我正在努力将我在ENUMS中声明的值加在一起。我基本上需要根据排名将每张卡的价值加在一起。
我尝试了一些事情但实际上没有任何地方。我可以显示ENUM,但它们没有任何价值。
这是我的代码:
卡类
public class Card {
private Suit suit;
private Rank rank;
int totalValue;
public Card (Suit suit, Rank rank) {
this.suit = suit;
this.rank = rank;
}
public Suit getSuit(){
return suit;
}
public void setSuit(Suit suit)
{
this.suit = suit;
}
public Rank getRank()
{
return rank;
}
public void setRank(Rank rank)
{
this.rank = rank;
}
@Override
public String toString ( ) { return ( rank + " of " + suit); }
}
套装类
public enum Suit {
HEARTS , SPADES , CLUBS , DIAMONDS
}
排名等级
public enum Rank {
ACE(1),
TWO(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 RankValue;
private Rank (int rValue)
{
RankValue = rValue;
}
public int getRankValue()
{
return RankValue;
}
}
手工课
public class Hand {
private Card theCards[ ];
private int numCards;
private int totalValue;
private static final int max = 5;
private Rank rank;
private Suit suit;
public Hand ( )
{
theCards = new Card [max];
numCards = 0;
}
public void addCard( Card aCard )
{
if (numCards < max) theCards[numCards++] = aCard;
}
public void setRank(Rank rank){
this.rank = rank;
}
public void setSuit(Suit suit){
this.suit = suit;
}
public int totalValue() {
int totalValue = 0;
for (Card card : theCards) {
totalValue += card.getRank().getRankValue();
}
return totalValue;
}
@Override
public String toString ( )
{
String s = "Rank: " + rank + "Suit: " + suit;
for (int i = 0; i < numCards; ++i) {
s += "\n" + theCards[i] + "\n" + totalValue;
}
return s;
}
}
最后我的手动驾驶员使用主要方法
public class HandDriver {
public static void main( String[] args ){
Hand h1 = new Hand();
Card c1 = new Card(Suit.valueOf("HEARTS"),Rank.valueOf("TEN"));
Card c2 = new Card(Suit.valueOf("SPADES"),Rank.valueOf("ACE"));
Card c3 = new Card(Suit.valueOf("DIAMONDS"),Rank.valueOf("SEVEN"));
Card c4 = new Card(Suit.valueOf("HEARTS"),Rank.valueOf("NINE"));
Card c5 = new Card(Suit.valueOf("HEARTS"),Rank.valueOf("THREE"));
h1.addCard(c1);
h1.addCard(c2);
h1.addCard(c3);
h1.addCard(c4);
h1.addCard(c5);
System.out.print (h1.toString());
;
}
}
我基本上是在寻找能指出正确方向的人,以显示所有卡片的总价值
答案 0 :(得分:2)
在您的Hand类中,您使用的是int totalValue,然后在函数totalValue()中“阴影”,因此totalValue将为零。然后,在toString()中,您使用的是totalValue,它永远不会被计算出来。首先,在这里删除“int”:
public int totalValue() {
//removed "int", so you are not declaring local totalValue variable
//but using your class variable
totalValue = 0;
for (Card card : theCards) {
totalValue += card.getRank().getRankValue();
}
return totalValue;
}
然后,在你的toString()中,调用上面的函数,以便计算totalValue,然后你可以在循环中使用它:
@Override
public String toString ( )
{
String s = "Rank: " + rank + "Suit: " + suit;
//call totalValue() to calculate totalValue
totalValue();
for (int i = 0; i < numCards; ++i) {
//now you can use totalValue, because it's been calculated in totalValue()
s += "\n" + theCards[i] + "\n" + totalValue;
}
return s;
}
正如Holger所注意到的,您也可以使用Suit.HEARTS代替Suit.valueOf(“HEARTS”)。
编辑:正如Grove注意到的那样,不必为每张卡调用totalValue()。在构建字符串之前调用它,然后可以在for循环中使用totalValue变量。
答案 1 :(得分:0)
您的代码存在一些问题。
我同意你不应该使用的“Holger”
Suit.valueOf("HEARTS")
和
Rank.valueOf("TEN")
相反它应该是
Suit.HEARTS
Rank.TEN
然后在卡片和手牌课程中,您可能应该计算该卡片的价值或该手牌的价值,因为套装和等级被添加到卡片中,并且当卡片被添加到手牌中时Hand的总值或者想要toString()你只需要读取值而不是每次都计算它。
在Hand类中,将卡添加到“theCards”数组的方式应如下所示:
if (numCards < max) {
theCards[numCards] = aCard;
numCards++;
}
然后正如我前面提到的,你应该在这个if块中调用另一个你需要创建的方法来更新总值。
最后,要计算您可能想要做的事情的总数,
int suitVal = suit.ordinal(); // This returns a number which is the position of the enum value
int rankVal = rank.getRankValue();
totalValue = suitVal + rankVal;
我本可以更改你的所有代码并将其粘贴在这里,但我觉得这对学习不利。
希望这有帮助。