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

基于现有Card类完善Deck类生成扑克牌栈并实现格式化输出的方法

扑克牌Deck类实现指导

1. 修正数组对应关系

你现有代码里的rank数组和pointValue数组顺序不匹配:rank第一个元素是「Two(2)」,对应的点数应该是2,但你现在pointValue第一个元素是1,属于Ace的点数,先调整对应关系:

// 调整后三个数组同下标的值一一对应*这里要注意下标必须匹配,否则牌面和点数会对应错误*
String rank[] = {"Two", "Three", "Four", "Five", "Six", "Seven", "Eight", "Nine", "Ten", "Jack", "Queen", "King", "Ace"};
int pointValue[] = {2,3,4,5,6,7,8,9,10,11,12,13,1};

2. 补全Deck类核心逻辑

你需要在Deck类里补充构造方法初始化整副牌,还可以按需增加洗牌、抽牌、打印牌堆的常用功能,完整实现代码如下:

import java.util.Random;

public class Deck {
    // 四类花色
    String suit[] = {"Hearts", "Clubs", "Diamonds", "Spades"};
    // 牌面,和下方点数数组下标一一对应
    String rank[] = {"Two", "Three", "Four", "Five", "Six", "Seven", "Eight", "Nine", "Ten", "Jack", "Queen", "King", "Ace"};
    int pointValue[] = {2,3,4,5,6,7,8,9,10,11,12,13,1};
    Card[] deck = new Card[52];
    // 记录当前抽牌位置,抽牌功能用
    private int currentCardIndex = 0;

    // 构造方法:初始化生成整副52张牌
    public Deck() {
        int index = 0;
        // 外层遍历所有花色
        for (int i = 0; i < suit.length; i++) {
            // 内层遍历所有牌面
            for (int j = 0; j < rank.length; j++) {
                // 生成对应Card对象存入牌堆数组
                deck[index] = new Card(suit[i], rank[j], pointValue[j]);
                index++;
            }
        }
    }

    // 洗牌方法:打乱牌堆顺序
    public void shuffle() {
        currentCardIndex = 0;
        Random random = new Random();
        for (int i = 0; i < deck.length; i++) {
            // 随机交换两个位置的牌
            int randomIndex = random.nextInt(52);
            Card temp = deck[i];
            deck[i] = deck[randomIndex];
            deck[randomIndex] = temp;
        }
    }

    // 抽牌方法:抽取牌堆最上方一张牌
    public Card dealCard() {
        if (currentCardIndex < deck.length) {
            return deck[currentCardIndex++];
        }
        return null;
    }

    // 打印整副牌,输出格式和需求完全匹配
    public void printAllCards() {
        for (Card card : deck) {
            System.out.println(card.getRank() + " of " + card.getSuit() + " (value = " + card.getPointValue() + ")");
        }
    }

    // 测试主方法
    public static void main(String[] args) {
        Deck myDeck = new Deck();
        // 如需打乱牌序就取消下方注释
        // myDeck.shuffle();
        // 打印所有牌
        myDeck.printAllCards();
    }
}

3. 效果说明

运行上述代码的main方法就能输出要求格式的内容,示例输出如下:

Six of Hearts (value = 6)
Ace of Clubs (value = 1)
...其余49张牌依次输出

如果不想单独写打印逻辑,也可以直接修改Card类的toString方法,把里面的(point value = 改成(value = ,后续直接打印Card对象就能得到符合要求的输出。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 06:06:08