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

Java中使用printf实现字符串右对齐 解决阶梯图案右对齐输出问题

Java右对齐阶梯输出实现方案

问题原因

现有代码仅循环打印#字符,未在每行左侧补充对应数量的空格,因此无法实现右对齐效果,且当前printf调用未指定宽度参数,自然无法触发对齐逻辑。

可行实现方案

方案1:使用printf格式化参数直接实现(最简写法)

printf的字符串格式化支持直接指定输出宽度,正整数宽度默认按右对齐渲染,不足宽度的部分自动在左侧补空格,刚好匹配需求:

class MyTree {
    public static void staircase(int n) {
        String myGraph = "#";
        for(int i = 0; i < n; i++){
            // 拼接当前行需要的#字符串,长度为i+1
            String currentLine = myGraph.repeat(i + 1);
            // 指定总宽度为n,自动右对齐
            System.out.printf("%" + n + "s%n", currentLine);
        }
    }

    // 测试示例
    public static void main(String[] args) {
        staircase(4);
    }
}

如果使用Java 11以下版本,可替换myGraph.repeat(i + 1)为循环拼接对应数量的#即可

输出效果(n=4时):

#
  ##
 ###
####

方案2:修改原有嵌套循环逻辑

如果要保留原有的嵌套循环写法,可以增加空格打印的循环:

class MyTree {
    public static void staircase(int n) {
        String myGraph = "#";
        for(int i=0; i<n; i++){
            // 先打印左侧空格,数量为n-(i+1)
            for(int space = 0; space < n - i -1; space++){
                System.out.print(" ");
            }
            // 再打印对应数量的#
            for(int x = 0; x <=i; x++){
                System.out.print(myGraph);
            }
            // 换行
            System.out.println();
        }
    }
}

语法说明

  • %" + n + "s" 是printf的动态宽度写法,n为总宽度,字符串默认右对齐,左侧补空格
  • 如果需要左对齐只需在宽度前加负号:%-" + n + "s"

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 16:27:03