写数字塔时无法对齐数字

不知道是不是缩进的问题,每行的数字之间对不齐
另外在位数不一样时问题格外突出

题目

img

目的是写出满足题意的每列对齐的数字塔
我的代码

public static void main(String[] args) {
        
              Scanner input=new Scanner(System.in);
              int n=input.nextInt();
              for(int i=1;i<=n;i++) {
        
               for(int j=1;j<=n-i;j++) {//缩进
                System.out.print(" ");
               }
               for(int k=n,l=0;k<=n&&k>n-i;k--,l++) {//左半边
                int m=(int) Math.pow(2,l);
                System.out.print(m);
                
               }
                 
    
               for(int c=1,d=i-2;c<=i-1;c++,d--) {//右半边
                 int o=(int) Math.pow(2,d);
                 System.out.print(o);

               }
        
                
               System.out.println(); 
              }
    }

运行结果
n = 6时

img

单边运行也不齐
n = 6时

img

求造成这样结果的原因,如果能给出基于原代码的改进方案就更好了
谢谢

用 format 格式化输出就行了
参考如下:

import java.util.Scanner;

public class Main {

    public static void main(String[] args) {

        Scanner input = new Scanner(System.in);
        int n = input.nextInt();
        for (int i = 1; i <= n; i++) {
            for (int j = 1; j <= n - i; j++) {//缩进
                System.out.format("    ");
            }
            for (int k = n, l = 0; k <= n && k > n - i; k--, l++) {//左半边
                int m = (int) Math.pow(2, l);
                System.out.format("%4d", m);
            }

            for (int c = 1, d = i - 2; c <= i - 1; c++, d--) {//右半边
                int o = (int) Math.pow(2, d);
                System.out.format("%4d", o);
            }
            System.out.println();
        }
    }

}


已回答,莫辜负
————————————————————————————————————————

public static void main(String[] args) {
    Scanner input=new Scanner(System.in);
    int n=input.nextInt();
    for(int i=1;i<=n;i++) {
        // 左边空格数
        for(int j=1;j<=n-i;j++) {
            System.out.print("  ");
        }
        // 左半边数字
        for(int k=n,l=0;k<=n && k>n-i;k--,l++) {
            int m = (int) Math.pow(2,l);
            System.out.printf("%-4d", m);
        }
        // 右半边数字
        for(int c=1,d=i-2;c<=i-1;c++,d--) {
            int o = (int) Math.pow(2,d);
            System.out.printf("%-4d", o);
        }
        System.out.println(); 
    }
}