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

