在图案印刷方面需要帮助

时间:2013-11-17 21:38:50

标签: java

我需要打印以下模式,我几乎完成了编码部分。

1
1 2 1
1 2 4 2 1
1 2 4 8 4 2 1
1 2 4 8 16 8 4 2 1
1 2 4 8 16 32 16 8 4 2 1
1 2 4 8 16 32 64 32 16 8 4 2 1
1 2 4 8 16 32 64 128 64 32 16 8 4 2 1

以下是我试过的程序

public class MyPattern {
    public static void main(String[] args) {
        for (int i = 0; i <= 7; i++) {
            for (int j = 1; j <= 7 - i; j++) {
                System.out.print(" ");
            }

            for (int j = 0; j <= i; j++) {
                int n = (int) Math.pow(2.0D, j);

                if (n > 100) {
                    System.out.print(" " + n);
                } else if (n > 10) {
                    System.out.print(" " + n);
                } else {
                    System.out.print(" " + n);
                }

            }

            for (int j = i - 1; j >= 0; j--) {
                int n = (int) Math.pow(2.0D, j);
                if (n > 100) {
                    System.out.print(" " + n);
                } else if (n > 10) {
                    System.out.print(" " + n);
                } else {
                    System.out.print(" " + n);
                }

            }
            System.out.print('\n');
        }
    }
}

运行程序时,我得到以下输出

        1
       1 2 1
      1 2 4 2 1
     1 2 4 8 4 2 1
    1 2 4 8 16 8 4 2 1
   1 2 4 8 16 32 16 8 4 2 1
  1 2 4 8 16 32 64 32 16 8 4 2 1
 1 2 4 8 16 32 64 128 64 32 16 8 4 2 1

但是我需要将输出对齐到左边(首先指定)。请帮忙。

4 个答案:

答案 0 :(得分:2)

这部分代码明显是由它引起的:

for (int j = 1; j <= 7 - i; j++) {
    System.out.print(" ");
}

你试过没有它吗?

答案 1 :(得分:1)

if (n > 100) {
    System.out.print(" " + n);
} else if (n > 10) {
    System.out.print(" " + n);
} else {
   System.out.print(" " + n);
}

也可能只是因为n是什么并不重要 - 所有人都会这样做。

   System.out.print(" " + n);

答案 2 :(得分:0)

评论这一行:

                //System.out.print(" ");

在第一个for循环中。

答案 3 :(得分:0)

我希望这段代码可以帮助您理解一些事情。

// Make it ready for the loop, no point calling Math.pow() every loop - expensive
import static java.lang.Math.pow;

public class MyPattern {

    public void showTree(int treeDepth) {

        // Create local method fields, we try to avoid doing this in loops
        int depth = treeDepth;
        String result = "", sysOutput = "";

        // Look the depth of the tree
        for( int rowPosition = 0 ; rowPosition < depth ; rowPosition++ ) {
            // Reset the row result each time
            result = "";

            // Build up to the centre (Handle the unique centre value here)
            for( int columnPosition = 0 ; columnPosition <= rowPosition ; columnPosition++ )
                result += (int) pow(2, columnPosition) + " ";

            // Build up from after the centre (reason we -1 from the rowPosition)
            for ( int columnPosition = rowPosition - 1 ; columnPosition >= 0 ; columnPosition-- )
                result += (int) pow(2, columnPosition) + " ";

            // Add the row result to the main output string
            sysOutput += result.trim() + "\n";
        }

        // Output only once, much more efficient
        System.out.print( sysOutput );
    }

    // Good practice to put the main method at the end of the methods
    public static void main(String[] args) {
        // Good practice to Create Object of itself
        MyPattern test = new MyPattern();

        // Call method on object (very clear this way)
        test.showTree(5);
    }
}