如何格式化这个特定时间表

问题描述 投票:0回答:1
public class ProgramSummary{
    public static void main(String[] args){
        final int[][] timesTable = new int[12][];

        for (int i = 0; i < 12; i++) {//First start
            int[] row = new int[12];
            for (int j = 0; j < 12; j++) {
                row[j] = (i + 1) * (j + 1);
            }
            timesTable[i] = row;
        }

        for (int i = 0; i < 12; i++) {
            for (int j = 0; j < 12; j++) {
                System.out.printf("%4d", timesTable[i][j]);
            }
            System.out.println();
        }

        System.out.println();//First end
        
        

        for (int i = 0; i < 12; i++) { //second start
            for (int j = 0; j <= i; j++) {
                System.out.printf("%4d", timesTable[i][j]);
            }
            System.out.println();
        }//second end

        System.out.println();

        for (int i = 1; i <= 12; i++) {//third start
            for (int j = 1; j <= 12 - i + 1; j++) {
                System.out.printf("%4d", timesTable[i-1][j-1]);
            }
            System.out.println();
        }//third end

        System.out.println();

        for (int i = 0; i < 12; i++) {//Fourth start
            for (int j = 12; j > i; j--) {
                System.out.printf("%4d", timesTable[i][j-1]);
            }
            System.out.println();
        }//Fourth end
        
        System.out.println();

   
       
        for (int i = 0; i < 12; i++) {
            for (int j = 12; j >= timesTable.length - i; j--) {
                System.out.printf("%4d", timesTable[i-1][j]);
            }
            System.out.println();
        }


    }
}

我无法让它输出我想要的内容。我的目标是让第五个嵌套循环以精确的空格输出。其余的代码都很好。

我已经尝试过上面的代码,但完全不知道如何按照我想要的方式格式化它。同样,只有第五个嵌套循环是我遇到问题的地方。谢谢

目标输出:

  12
  24  22
  36  33  30
  48  44  40  36
  60  55  50  45  40
  72  66  60  54  48  42
  84  77  70  63  56  49  42
  96  88  80  72  64  56  48  40
 108  99  90  81  72  63  54  45  36
 120 110 100  90  80  70  60  50  40  30
 132 121 110  99  88  77  66  55  44  33  22
 144 132 120 108  96  84  72  60  48  36  24  12
java arrays loops multidimensional-array nested-loops
1个回答
0
投票

format
类的
String
方法会将数字格式化为特定长度。

这是为

format
方法创建动态格式化程序的示例。 main 方法的前四行显示了如何执行此操作。此代码适用于您不知道数字最大大小的任何情况。

public class WeirdTimesTable {

    public static void main(String[] args) {
        int maxValue = 12;
        int maxProduct = maxValue * maxValue;
        int length = Integer.toString(maxProduct).length() + 1;
        String formatter = "%" + length + "d";
        
        for (int multiplier = 1; multiplier <= maxValue; multiplier++) {
            for (int index = 0; index < maxValue; index++) {
                int value = maxValue - index;
                int product = multiplier * value;
                if (index < multiplier) {
                    System.out.print(String.format(formatter, product));
                } else {
                    System.out.print("    ");
                }
            }
            System.out.println();
        }
    }

}

测试结果

  12                                            
  24  22                                        
  36  33  30                                    
  48  44  40  36                                
  60  55  50  45  40                            
  72  66  60  54  48  42                        
  84  77  70  63  56  49  42                    
  96  88  80  72  64  56  48  40                
 108  99  90  81  72  63  54  45  36            
 120 110 100  90  80  70  60  50  40  30        
 132 121 110  99  88  77  66  55  44  33  22    
 144 132 120 108  96  84  72  60  48  36  24  12
© www.soinside.com 2019 - 2024. All rights reserved.