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

Java纸牌游戏中ArrayList<Card>[]的竖列打印排版问题求助

解决纸牌练习程序竖列向下排版问题

要把ArrayList<Card>[] playSpace从横向排列改成竖列向下排列,核心是换遍历逻辑——从按列遍历改成按行遍历,具体实现步骤如下:

核心思路

先找到所有纸牌列中最长的那列的长度(决定要打印多少行),然后逐行打印:每行里依次输出每一列对应位置的纸牌,没有纸牌的位置用空格占位,保证竖列对齐。

代码替换方案

假设你原来的横向打印代码是这样的:

// 原横向打印逻辑:逐列打印所有纸牌
for (ArrayList<Card> column : playSpace) {
    for (Card card : column) {
        System.out.print(card + " ");
    }
    System.out.println();
}

把它替换成下面的竖列打印逻辑:

// 新竖列打印逻辑
// 1. 先获取所有列中最长的长度,确定总行数
int maxColumnHeight = 0;
for (ArrayList<Card> column : playSpace) {
    if (column.size() > maxColumnHeight) {
        maxColumnHeight = column.size();
    }
}

// 2. 逐行打印每一列的对应位置
for (int rowIndex = 0; rowIndex < maxColumnHeight; rowIndex++) {
    for (ArrayList<Card> column : playSpace) {
        // 当前列有对应行的牌就打印,否则输出占位空格
        if (rowIndex < column.size()) {
            // 用格式化输出保证对齐,%-6s表示左对齐占6个字符宽度,可根据纸牌字符串长度调整
            System.out.printf("%-6s", column.get(rowIndex));
        } else {
            // 和格式化宽度一致的空格,保证竖列对齐
            System.out.print("      ");
        }
    }
    // 每行结束换行
    System.out.println();
}

细节调整

  • 如果你的Card类toString()返回的字符串长度不一(比如"♠A"是2字符,"♥10"是3字符),可以调整printf里的%-6s的数字,保证每列的占位宽度足够,避免排版错乱。
  • 空格占位的数量要和格式化的宽度一致,比如用%-6s就对应6个空格,这样每列的位置才能对齐。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 22:05:27