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

Java中如何正确使用制表符输出对齐的5x5二维数组网格

问题根源

你现在输出异常是因为printCard方法里使用了System.out.println()打印每个元素,这个方法会在输出内容后自动追加换行,同时你额外加了一次换行调用,导致每个元素都单独占两行。另外你没有控制换行时机,应该遍历完一行的5个元素之后再换行,而不是每个元素都换行。


优先使用制表符的实现方案

直接修改printCard方法即可,制表符会自动适配宽度对齐,后续你把元素替换为XX也能正常适配:

public static void printCard(String[][] card1, String[][] card2) {
    System.out.println(player1);
    // 建议把i、j声明为循环局部变量,不要用全局变量避免污染
    for(int i = 0; i < card1.length; i++) {
        for(int j = 0; j < card1[i].length; j++) {
            // 同一行元素用制表符分隔,不换行
            System.out.print(card1[i][j] + "\t");
        }
        // 整行元素打印完成后再统一换行
        System.out.println();
    }

    // 需要打印玩家2的卡片可以放开下面的注释
    /*
    System.out.println("\n" + player2);
    for(int i = 0; i < card2.length; i++) {
        for(int j = 0; j < card2[i].length; j++) {
            System.out.print(card2[i][j] + "\t");
        }
        System.out.println();
    }
    */
}

可选:和示例完全一致的空格对齐方案

如果不需要制表符,想要和你给出的期望输出完全匹配的2位宽度右对齐效果,可以把打印语句替换为格式化输出:

// 每个元素固定占2个字符宽度,右对齐,后面加空格分隔
System.out.printf("%2s ", card1[i][j]);

小提示

你代码里声明的List<Scanner> usedNums泛型明显不符合业务逻辑(你要存的应该是已使用的数字,不是Scanner对象),这个属于业务逻辑问题,和本次打印无关,后续可以自行调整。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 06:45:03