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
相关产品推荐
相关产品推荐

