gpt4 book ai didi

java - 将 ENUM 的值相加

转载 作者:行者123 更新时间:2023-12-02 06:32:10 24 4
gpt4 key购买 nike

我正在努力将我在 ENUMS 中声明的值加在一起。我基本上需要根据等级将一手牌中每张牌的值加在一起。

我已经尝试了一些方法,但实际上没有取得任何进展。我可以显示 ENUM,但它们没有值(value)。

这是我的代码:

卡片类别

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

}

手部类(class)

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());


;
}
}

我基本上是在寻找能够为我指明正确方向以显示所有卡牌总值(value)的人

最佳答案

在您的 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 变量。

关于java - 将 ENUM 的值相加,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19973779/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com