图案打印程序 - 无法倒序打印镜像部分

Pattern-printing program - Unable to print the mirrored part in reverse order

我正在尝试创建一个图案打印程序。

我无法以相反的顺序打印我的图案。我知道第二个 for 循环中存在一些逻辑错误,但我无法识别它。

    public class test {
      public static void main(String[] args) {
        int num = 7;
        int temp1 = 1;
        int temp2 = 1;
        for (int i = 1; i <= num / 2; i++) {
          for (int j = 1; j <= num - i; j++) {
            System.out.print(" ");
          }
          for (int k = 1; k <= temp1; k++) {
            System.out.print(Math.abs(k - temp2));
          }
          temp1 += 2;
          temp2++;
          System.out.println();
        }
        temp1 = 1;
        temp2 = 1;
        for (int i = num - (num / 2); i >= 1; i--) {
          for (int j = 1; j <= num - i; j++) {
            System.out.print(" ");
          }
          for (int k = temp1; k >= 1; k--) {
            System.out.print(Math.abs(k - temp2));
          }
          temp1 += 2;
          temp2++;
          System.out.println();
        }
      }
    }

程序输出:

      0   
     101  
    21012 
   0      
    101   
     21012
      3210123

预期输出:

      0   
     101  
    21012 
   3210123
    21012
     101
      0

因为你需要打印的图形由三部分组成,所以你必须将你的解决方案分解成三个不同的方法。所以测试它们会更容易。

topbottom很相似。您可以采取的最简单的方法是对 底部部分 重复使用相同的代码,仅进行一项更改:外部 for 的索引正在用最大值初始化,并将得到在迭代的每一步递减(你做对了,但你也改变了内部 for 循环,因为你的第一个循环块也负责打印中间部分 ).

public static void print(int size) {
    printTopPart(size);
    if (size % 2 == 1) { // middle part will be printed if size is odd
        printMiddlePart(size);
    }
    printBottomPart(size);
}

public static void printTopPart(int size) {
    int height = size / 2;
    for (int row = 0; row < height; row++) {
        // print the white space
        for (int i = 0; i < height - row; i++) {
            System.out.print(" ");
        }
        // print the row of numbers
        for (int i = 0; i < row * 2 + 1; i++) {
            System.out.print(Math.abs(row - i));
        }
        System.out.println(); // advance the output to the next row
    }
}

public static void printMiddlePart(int size) {
    // print the row of numbers
    for (int i = 0; i < size; i++) {
        System.out.print(Math.abs(size / 2 - i));
    }
    System.out.println(); // advance the output to the next row
}

public static void printBottomPart(int size) {
    int height = size / 2;
    for (int row = height - 1; row >= 0; row--) {
        // print the white space
        for (int i = 0; i < height - row; i++) {
            System.out.print(" ");
        }
        // print the row of numbers
        for (int i = 0; i < row * 2 + 1; i++) {
            System.out.print(Math.abs(row - i));
        }
        System.out.println(); // advance the output to the next row
    }
}

main() - 演示

public static void main(String[] args) {
    print(7);
}

输出

   0
  101
 21012
3210123
 21012
  101
   0