0

我正在努力将我在 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());


;
} 
}

我基本上是在寻找能够指出我正确方向以显示所有卡片总价值的人

4

2 回答 2

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 变量。

于 2013-11-14T09:43:28.850 回答
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;

我本可以更改您所有的代码并将其粘贴在这里,但我认为这不利于学习。

希望这可以帮助。

于 2013-11-14T09:54:25.517 回答