0

我需要从发给用户的 13 张牌中找出排名的总和。

这是在我的类 card.java 中,它以字符串形式返回卡片的值,然后以字符串形式返回花色,然后以 int 形式返回等级。

public  String toString(){

String s = ("I am the " + rankString[rank-2] + " of " + suit + "(rank): " + rank);

    return  s;

}

这是在我的 CardFrame 课程中。CardFrame.java

private void doButton1Stuff(){
    //textArea.append("\nButton 1 Clicked");
    textArea.setText("");
    for(int i = 0; i<13; i++){
    textArea.append(deck.getNextCard().toString()+"\n");
    }

一切正常,我只需要找出一种方法,将用户收到的 13 张牌中的所有等级加在一起,然后将其输出为他们的分数。

public Card getNextCard(){
    //check for end of deck
        topCard++;
        if(topCard==53){
        topCard = 1;
        shuffle();
        }


    return cards[deck[topCard-1]];
4

3 回答 3

2

您需要一个rank变量访问器。

public int getRank() {
    return rank;
}

然后你可以将它用于某个集合中的每张卡片(这里我假设一个数组):

for(Card c: cards) {
    sum += c.getRank();
}

对于您的用例,它可以在这里使用:

int sum = 0;
for(int i = 0; i<13; i++) {
    Card c = deck.getNextCard();
    textArea.append(c.toString()+"\n");
    sum += c.getRank();
}
于 2012-06-21T20:51:42.027 回答
0

如果您无法从 Card 类中访问您的排名值,您可以随时从其toString()输出中读取它,如下所示:

String cardToStringOutput = "I am the " + "rankString[rank-2]" + " of "
        + "suit" + "(rank): " + "11";
int rank=Integer.parseInt(cardToStringOutput.split(" ")[6]);
System.out.println("rank="+rank);

但是考虑向 Card 类添加一些 getter,这样您就不必使用上面的代码。

于 2012-06-21T20:58:34.217 回答
0

看起来您的“卡片”类(我无法从代码中分辨出您将其命名为什么)有一个“等级”成员,我猜它是一个整数。所以我认为你遇到的问题是迭代。试试这个:

private void doButton1Stuff(){
    //textArea.append("\nButton 1 Clicked");
    textArea.setText("");
    int score = 0;
    for(int i = 0; i<13; i++){
        Card card = deck.getNextCard();
        score += card.rank
        textArea.append(card.toString()+"\n");
    }
    textArea.append("Score: ");
    textArea.append(score);
}

这假设您的成员 var “rank” 是可访问的(请参阅“public”、“protected”、“private”)

于 2012-06-21T20:59:04.833 回答