You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java中ArrayList存储Card对象是否需为每个对象设置唯一名称?

你的Java卡牌作业问题解答

1. 是否需要给每个Card对象设置唯一名称?

不需要。标准卡牌的花色+点数组合本身就能唯一标识一张牌(比如“红桃A”“梅花10”),没必要额外添加唯一名称。你可以在Card类里用两个属性(比如String suit和int rank)存储花色和点数,通过这两个属性的组合区分不同卡牌即可。

2. 如何显示卡牌的点数与花色、调用列表中对象的方法?

首先在Card类中重写toString()方法,用来直接返回卡牌的花色和点数信息;如果需要单独获取属性,再添加对应的get方法。示例代码如下:

public class Card {
    private String suit;
    private int rank;

    // 构造方法
    public Card(String suit, int rank) {
        this.suit = suit;
        this.rank = rank;
    }

    // 重写toString,方便直接打印卡牌信息
    @Override
    public String toString() {
        // 把数字点数转成A、J、Q、K的格式
        String rankStr;
        if (rank == 1) {
            rankStr = "A";
        } else if (rank == 11) {
            rankStr = "J";
        } else if (rank == 12) {
            rankStr = "Q";
        } else if (rank == 13) {
            rankStr = "K";
        } else {
            rankStr = String.valueOf(rank);
        }
        return suit + rankStr;
    }

    // 获取花色的方法
    public String getSuit() {
        return suit;
    }

    // 获取点数的方法
    public int getRank() {
        return rank;
    }
}

之后在Deck类或测试类中,遍历存储Card的ArrayList时,直接打印对象或调用其方法即可:

import java.util.ArrayList;

public class Deck {
    private ArrayList<Card> cards;

    public Deck() {
        cards = new ArrayList<>();
        // 初始化标准52张牌
        String[] suits = {"红桃", "方块", "梅花", "黑桃"};
        for (String suit : suits) {
            for (int rank = 1; rank <= 13; rank++) {
                cards.add(new Card(suit, rank));
            }
        }
    }

    // 打印卡组所有卡牌
    public void printDeck() {
        for (Card card : cards) {
            // 直接打印会自动调用toString()
            System.out.println(card);
            // 也可以调用get方法单独获取属性
            // System.out.println("花色:" + card.getSuit() + ",点数:" + card.getRank());
        }
    }
}

3. 将卡牌从卡组移至玩家手牌后是否会有变化?

不会有变化。你移动的是Card对象的引用,不管在Deck的ArrayList里还是玩家手牌的ArrayList里,指向的都是同一个Card对象。除非你主动修改这个Card对象的属性(比如更改花色或点数),否则卡牌本身的信息完全不会改变。

简单的移动逻辑示例:

// Deck类中添加抽卡方法
public Card drawCard() {
    if (!cards.isEmpty()) {
        return cards.remove(cards.size() - 1);
    }
    return null; // 卡组为空时返回null
}

// 测试抽卡到手牌的逻辑
public static void main(String[] args) {
    Deck deck = new Deck();
    ArrayList<Card> playerHand = new ArrayList<>();
    // 从卡组抽一张牌加入手牌
    playerHand.add(deck.drawCard());
    // 此时手牌里的卡牌和之前卡组里的是同一个对象,属性完全一致
}

内容的提问来源于stack exchange,提问作者CynicalBlitz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.01 22:03:19